【问题标题】:Changing background image on a plot更改绘图上的背景图像
【发布时间】:2014-08-27 03:31:51
【问题描述】:

我想更改图表的背景图像。经过一些研究,我发现了这种方法:

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)

我必须将后台调用放在哪里?是常见问题还是我拨打的电话正在覆盖背景更改?感谢您的帮助。

【问题讨论】:

  • 到底是什么问题?你能举一个最小的可运行示例(你有很多变量没有给出值并删除所有与你的问题无关的命令(我不认为设置标题会影响它))?

标签: python matplotlib seaborn


【解决方案1】:

嗯...这可能是您的身材范围的问题。这是一个例子:

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,但在本例中不需要。

【讨论】:

  • 有效!使用这样的范围:plt.imshow(img, extent=[-axe_lim,axe_lim, -axe_lim,axe_lim], aspect='auto') 感谢您的帮助
  • 很高兴听到它有效。如果您认为它可以解决您的问题,您可以接受它作为答案。
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 2016-01-09
  • 2020-12-16
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多