在绘图中更改背景图片

3

我想要更改图表的背景图片。经过一番调查,我找到了以下方法:

img = imread("name.jpg")
plt.scatter(x,y,zorder=1)
plt.imshow(img,zorder=0)
plt.show()

它的表现良好,并创建了一个包含图形的窗口。然而,当我需要将图形保存到文件时,它似乎无法正常工作。
我有类似以下代码:
plt.clf()
axe_lim = int(max([abs(v) for v in x_values+y_values])*1.4)
plt.plot(x_values, y_values)
plt.gcf().set_size_inches(10,10,forward='True') 
plt.axhline(color='r')
plt.axvline(color='r')
plt.title(label.upper(), size=25)
plt.xlim((-axe_lim,axe_lim))
plt.ylim((-axe_lim,axe_lim))
plt.xlabel(units)
plt.ylabel(units)
plt.grid(True)
plt.tight_layout()
img = imread("name.jpg")
plt.imshow(img)
plt.savefig(plot_pict)

我需要把背景调用放在哪里?这是一个常见的问题,还是我所做的调用正在覆盖背景更改?谢谢帮助。


什么是确切的问题?你能提供一个最小可运行的示例吗(你有很多变量没有赋值,并删除所有与你的问题无关的命令(我认为设置标题不会影响它))? - tacaswell
1个回答

4

嗯...这可能与您的图形范围有关。以下是一个示例:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)
# a plot
t = np.linspace(0,2*np.pi,1000)
ax.plot(t * np.sin(t), t * np.cos(t), 'w', linewidth=3)
ax.plot(t * np.sin(t), t * np.cos(t), 'k', linewidth=1)

# create a  background image
X = np.linspace(0, np.pi, 100)
img = np.sin(X[:,None] + X[None,:])

# show the background image
x0,x1 = ax.get_xlim()
y0,y1 = ax.get_ylim()
ax.imshow(img, extent=[x0, x1, y0, y1], aspect='auto')

fig.savefig('/tmp/test.png')

重点是在轴范围设置后绘制图像。如果首先绘制图像,则可能会缩放到远离轴区域的某个位置。此外,使用aspect='auto'确保图像不会试图更改纵横比。(自然地,图像将被拉伸以填满整个区域。)如果需要,您可以设置zorder,但在此示例中不需要。

enter image description here


它运行正常!使用如下的范围:plt.imshow(img, extent=[-axe_lim,axe_lim, -axe_lim,axe_lim], aspect='auto') 感谢您的帮助 - plafone
很高兴听到它能够正常工作。如果您认为它解决了您的问题,您可以将其接受为答案。 - DrV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接