更改背景颜色后如何保存Matplotlib图形?

时间:2019-08-17 19:04:23

标签: python matplotlib

使用Spyder IDE,我创建了matplotlib图,并将图形对象和轴对象的面(背景)颜色更改为黑色。当我尝试使用plt.savefig(...)保存图形时,不包括轴,标题和轴标签。

我尝试实现standard advice,在轴被切断时将bbox_inches='tight'添加到plt.savefig()函数中:

plt.savefig("my_fig_name.png", bbox_inches='tight')

无济于事。 Others suggested,我在Jupyter Notebook或Spyder中将绘图方法从“自动”更改为“内联”。这没有效果。我还尝试使用以下方法来确保图中有足够的空间容纳我的轴:

fig.add_axes([0.1,0.1,0.75,0.75])

这也不起作用。下面足以重现我的经验。

import matplotlib.pyplot as plt

xs, ys = [0,1], [0,1]

fig = plt.figure(figsize=(6, 6)) # Adding tight_layout=True has no effect
ax = fig.add_subplot(1, 1, 1)

# When the following block is commented out, the color of the 
# plot is unchanged and the plt.savefig function works perfectly

fig.patch.set_facecolor("#121111")
ax.set_facecolor("#121111")
ax.spines['top'].set_color("#121111")
ax.spines['right'].set_color("#121111")
ax.spines['bottom'].set_color('white')
ax.spines['left'].set_color('white')
ax.xaxis.label.set_color('white')
ax.tick_params(axis='x', colors='white')
ax.yaxis.label.set_color('white')
ax.tick_params(axis='y', colors='white')

ax.set_title("My Graph's Title", color="white")

plt.plot(xs, ys)
plt.xlabel("x-label")
plt.ylabel("y-label")

plt.savefig("my_fig_name.png", bbox_inches="tight")

我希望得到这样的图像:

What I Expect to Get

但是,plt.savefig(...)给了我以下结果:

What I Actually Get

奇怪的是,即使我将tight_layout=True参数添加到matplotlib图形构造函数中,绘图周围似乎也没有空白。

fig = plt.figure(figsize=(6, 6), tight_layout=True)

然后,当我注释掉更改绘图的面部颜色的代码时,将正确保存图形,并正确显示所有轴和标签。

1 个答案:

答案 0 :(得分:2)

为了解决您的问题,您只需要在facecolor调用中指定plt.savefig关键字参数,在这种情况下:

plt.savefig("my_fig_name.png", bbox_inches="tight", facecolor="#121111")

给出预期的.png输出:

correct_output

有关更多信息,请参见plt.savefig documentation