2011-01-26 212 views
54

有人能解释为什么下面的代码在设置图形的facecolor时不起作用吗?Matplotlib figure 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设置未被拾取。为什么?

感谢您的帮助。

回答

75

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

(这是故意的,居然......的假设是,你可能想要控制所保存的数字与facecolor kwarg到savefig的背景色。这是一个混乱和不一致的默认,但!)

最简单的解决方法就是做fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')(我指定这里的edgecolor因为实际数字默认edgecolor是白色的,它会给你一个白色边框保存图)

希望帮助!

+0

感谢您的解释! – Curious2learn 2011-01-26 19:29:49

17

我只好用透明的关键字,以得到我选择的颜色与我最初的

fig=figure(facecolor='black') 

这样的:

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

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

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