Matplotlib图facecolor(背景色)


91

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

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设置。为什么?

谢谢你的帮助。

Answers:


130

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

(实际上,这是有意的。假设是您可能希望使用facecolorkwarg来控制保存的图形的背景颜色。不过,savefig这是一个令人困惑且不一致的默认值!)

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

希望有帮助!


30

我必须使用transparent关键字来获得在初始字体中选择的颜色

fig=figure(facecolor='black')

像这样:

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

4
transparent=True如果提供一个,为什么要使用facecolor
Alexis.Rolland

27

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

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

0

如果要更改背景颜色,请尝试以下操作:

plt.rcParams['figure.facecolor'] = 'white'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.