在图上添加透明图片

sam*_*amy 5 python image matplotlib matplotlib-basemap

下面我的python脚本在使用Basemap模块生成的地图上添加了一张图片(这个简单示例中生成的矩形)和GPS轨迹.
现在我想让两个轨道都是透明的.通过alphakwarg 的赛道没有问题,但我无法想象如何为图片做这件事.

import matplotlib.pyplot as plt
from PIL import Image
from matplotlib.offsetbox import AnnotationBbox, OffsetImage
from mpl_toolkits.basemap import Basemap

lats = [ 45, 15  ]
lons = [ 0 , 100 ]

fig = plt.figure( dpi = 300 )
ax  = plt.subplot(111)

myBaseMap = Basemap( projection='ortho', lat_0=lats[-1], lon_0=lons[-1] )
myBaseMap.bluemarble()

planeImg = Image.new('RGB', (600, 300), color = 'red')
planeXY  = myBaseMap( lons[-1], lats[-1] )
x,y      = myBaseMap( lons, lats )

plt.plot( x, y, color='r', alpha=0.5, linewidth=3  )

imagebox = OffsetImage( planeImg , zoom=.4 )

ab = AnnotationBbox( imagebox, myBaseMap( lons[-1], lats[-1] ), xybox=( 0., 0. ), xycoords='data', boxcoords='offset points', frameon=False )
ax.add_artist(ab)
plt.show()
Run Code Online (Sandbox Code Playgroud)

此代码使用透明线生成下面的图片. 现在我想以相同的方式使红色矩形透明.

我试着set_alpha在注释框和ax上使用方法但是没有用.
有任何想法吗 ?

谢谢.

Tho*_*ühn 5

如果创建之前为图像设置了 alpha 值OffsetImage,则结果看起来如预期。这个答案解释了如何设置枕头图像的 alpha 值。请注意,alpha值必须在0到255之间,而不是0和1之间。简而言之,您只需在代码中添加一行(注意我更改了图像分辨率):

import matplotlib.pyplot as plt
from PIL import Image
from matplotlib.offsetbox import AnnotationBbox, OffsetImage
from mpl_toolkits.basemap import Basemap

lats = [ 45, 15  ]
lons = [ 0 , 100 ]

fig = plt.figure( dpi = 100 )
ax  = plt.subplot(111)

myBaseMap = Basemap( projection='ortho', lat_0=lats[-1], lon_0=lons[-1] )
myBaseMap.bluemarble()

planeImg = Image.new('RGB', (600, 300), color = 'red')
planeImg.putalpha(128)

planeXY  = myBaseMap( lons[-1], lats[-1] )
x,y      = myBaseMap( lons, lats )

plt.plot( x, y, color='r', alpha=0.5, linewidth=3  )

imagebox = OffsetImage( planeImg , zoom=.4 )

ab = AnnotationBbox( imagebox, myBaseMap( lons[-1], lats[-1] ), xybox=( 0., 0. ), xycoords='data', boxcoords='offset points', frameon=False )
ax.add_artist(ab)
plt.show()
Run Code Online (Sandbox Code Playgroud)

得到以下图像:

上面代码的结果