Matplotlib图形的facecolor(背景颜色)

140

请问有人能解释一下为什么在设置图形 facecolor 时下面的代码不能正常工作吗?

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")命令捕获。但是,facecolor设置没有被捕获。为什么?

感谢您的帮助。

4个回答

194

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

(实际上这是故意的...假设你可能想要使用savefig中的facecolor kwarg来控制保存图像的背景颜色。尽管如此,这个默认值仍然存在混淆和不一致之处!)

最简单的解决方法就是执行fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')。(我在这里指定了边缘颜色,因为实际图形的默认边缘颜色是白色,这会在保存的图形周围产生白色边框)


facecolor现在会触发一个警告:MatplotlibDeprecationWarning: savefig()得到了意外的关键字参数"fc",自3.3版本起不再支持,并将在3.6版本中成为错误。 - C-3PO

49

savefig有其自己的参数facecolor。我认为比被接受的答案更简单的方法是全局设置它们只需一次,而不是每次都放置facecolor=fig.get_facecolor()

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

45

我必须使用transparent关键字才能得到我最初选择的颜色

fig=figure(facecolor='black')

像这样:

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

9
如果您提供了facecolor,为什么要使用transparent=True - Alexis.Rolland

-1
只需在plt.savefig()中添加facecolor='red'即可。例如:
plt.savefig('figname.png', facecolor='red')

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