【发布时间】:2019-01-19 09:33:15
【问题描述】:
下面的 Python 脚本在使用 Basemap 模块生成的地图上添加了一张图片(在这个简单示例中生成了一个矩形)和 GPS 轨迹。
现在我想让两个轨道都成为透明的矩形。通过alpha kwarg 的轨道没问题,但我不知道如何为图片做。
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()
此代码生成下面带有透明线的图片。 现在我想让红色矩形以同样的方式透明。
我尝试在注释框和斧头上使用set_alpha 方法,但没有成功。
有任何想法吗 ?
谢谢。
【问题讨论】:
-
imshow 中的
extent选项似乎可以解决问题,请参阅stackoverflow.com/a/34459284/8069403 和stackoverflow.com/q/15160123/8069403。是你要找的吗? -
感谢您的回答,但这不是我想要的。我编辑了这篇文章,希望现在更清楚。如果我没记错
extent工作是设置图像大小,但我在这里的尺寸没有问题。我的问题是我在情节前景上添加了一张图片:如何使这张图片透明?请注意,我以前使用imshow,但现在我更喜欢Image和AnnotationBbox,因为我发现它们更灵活。 -
Here 是 matplotlib 注释框的演示。如果我理解您希望注释框中的图像透明?如果示例代码可运行,将会很有帮助
-
是的,你理解正确,这就是我想要的!感谢演示,我首先使用它来处理注释框,但没有发现任何透明度。在我之前的帖子编辑之后,代码应该可以运行了,因为它只依赖于 python 库。也许你想让我停止使用底图?如果你愿意,我肯定可以用任何 2D 绘图替换它,问题是一样的:使注释框图片透明,这样我们就可以看到透明度后面的绘图。
标签: python image matplotlib matplotlib-basemap