将背景图像添加到绘图
Posted
技术标签:
【中文标题】将背景图像添加到绘图【英文标题】:Adding a background image to a plot 【发布时间】:2013-02-16 02:17:15 【问题描述】:假设我正在以图像为背景绘制一组点。我在示例中使用了Lena 图像:
import numpy as np
import matplotlib.pyplot as plt
from scipy.misc import imread
np.random.seed(0)
x = np.random.uniform(0.0,10.0,15)
y = np.random.uniform(0.0,10.0,15)
img = imread("lena.jpg")
plt.scatter(x,y,zorder=1)
plt.imshow(img,zorder=0)
plt.show()
这给了我。
我的问题是:如何在图中指定图像的角坐标?假设我希望左下角位于x, y = 0.5, 1.0
,右上角位于x, y = 8.0, 7.0
。
【问题讨论】:
【参考方案1】:使用imshow
的extent
关键字。参数顺序为[left, right, bottom, top]
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
x = np.random.uniform(0.0,10.0,15)
y = np.random.uniform(0.0,10.0,15)
datafile = 'lena.jpg'
img = plt.imread(datafile)
plt.scatter(x,y,zorder=1)
plt.imshow(img, zorder=0, extent=[0.5, 8.0, 1.0, 7.0])
plt.show()
对于希望在散点图的一小块区域中显示图像的情况,请更改图的顺序(.imshow
然后.scatter
)并更改extent
值。
plt.imshow(img, zorder=0, extent=[3.0, 5.0, 3.0, 4.50])
plt.scatter(x, y, zorder=1)
plt.show()
【讨论】:
效果很好。我唯一需要添加的是设置plt.xlim
和plt.ylim
否则视口/轴将紧密贴合背景图像。
不错的解决方案!谢谢YXD!只是想添加以防有人遇到同样的情况:如果您执行 plt.scatter(),然后执行 plt.imshow(),则该图形可能会被图像覆盖,其大小在“extent”kwarg 中定义。如果是这种情况,请尝试:先执行 plt.imshow(),然后执行 plt.scatter()。然后您将获得一个图形,其大小由您的数据 (x,y) 确定,并在图形上显示图像。【参考方案2】:
您必须使用extent
关键字参数:
imshow(img, zorder=0, extent=[left, right, bottom, top])
extent 的元素应该以数据单位指定,以便图像可以匹配数据。例如,这可用于将地理路径(坐标数组)覆盖在地理参考地图图像上。
【讨论】:
以上是关于将背景图像添加到绘图的主要内容,如果未能解决你的问题,请参考以下文章