将背景图像添加到绘图

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】:

使用imshowextent 关键字。参数顺序为[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.xlimplt.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 的元素应该以数据单位指定,以便图像可以匹配数据。例如,这可用于将地理路径(坐标数组)覆盖在地理参考地图图像上。

【讨论】:

以上是关于将背景图像添加到绘图的主要内容,如果未能解决你的问题,请参考以下文章

antV G2 为柱状图添加背景颜色

php 将后缩略图作为背景图像添加到任何div

如何从具有透明背景的 matplotlib 导出绘图?

跟进背景图像与img标签[重复]

将图像添加到闪亮的应用程序

将背景图像添加到 QQuickItem