Matplotlib 图形颜色(背景颜色)

有人能解释一下为什么下面的代码在设置图形的颜色时不起作用吗?

import matplotlib.pyplot as plt


# create figure instance
fig1 = plt.figure(1)
fig1.set_figheight(11)
fig1.set_figwidth(8.5)


rect = fig1.patch
rect.set_facecolor('red') # works with plt.show().
# Does not work with plt.savefig("trial_fig.png")


ax = fig1.add_subplot(1,1,1)


x = 1, 2, 3
y = 1, 4, 9
ax.plot(x, y)


# plt.show()  # Will show red face color set above using rect.set_facecolor('red')


plt.savefig("trial_fig.png") # The saved trial_fig.png DOES NOT have the red facecolor.


# plt.savefig("trial_fig.png", facecolor='red') # Here the facecolor is red.

当我使用 fig1.set_figheight(11) fig1.set_figwidth(8.5)指定图形的高度和宽度时,这些都由命令 plt.savefig("trial_fig.png")提取。但是,不会选择颜色设置。为什么?

谢谢你的帮助。

207465 次浏览

这是因为 savefig覆盖了图形背景的颜色。

(实际上,这是经过深思熟虑的... ... 假设您可能希望用 facecolor kwarg 到 savefig来控制所保存图形的背景颜色。不过,这是一个令人困惑且前后矛盾的默认值!)

最简单的解决方法就是执行 fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')(我在这里指定 edgecolor,因为实际图形的默认 edgecolor 是白色的,这将为保存的图形提供一个白色边框)

希望能帮上忙!

我必须使用透明的关键字,以获得我选择的颜色与我的首字母

fig=figure(facecolor='black')

像这样:

savefig('figname.png', facecolor=fig.get_facecolor(), transparent=True)

savefig有自己的 facecolor参数。 我认为比公认答案更简单的方法是将它们设置为全局 就一次,而不是每次都设置为 facecolor=fig.get_facecolor():

plt.rcParams['axes.facecolor']='red'
plt.rcParams['savefig.facecolor']='red'