前一个问题是使用savefig()保存屏幕上显示的相同的面颜色(背景色),即:fig = plt.figure()
fig.patch.set_facecolor('blue')
fig.savefig('foo.png', facecolor=fig.get_facecolor())
(使用savefig()需要重新指定背景色。)
fig.patch.set_alpha(0.5)
我找不到一种方法,让一个透明的脸颜色的数字保存为它出现在屏幕上。文档对此似乎不完整:http://matplotlib.org/faq/howto_faq.html#save-transparent-figures-实际保存内容未显示。将transparent=True与savefig()一起使用并没有使facecolor透明的预期效果,相反,它似乎使除axes legend之外的所有内容在该颜色的顶部(包括图形背景)都透明。
编辑:部分相关代码摘录:def set_face_color(fig, facecolor):
if facecolor is False:
# Not all graphs get color-coding
facecolor = fig.get_facecolor()
alpha = 1
else:
alpha = 0.5
color_with_alpha = colorConverter.to_rgba(
facecolor, alpha)
fig.patch.set_facecolor(color_with_alpha)
def save_and_show(plt, fig, save, disp_on, save_as):
if save:
plt.savefig(save_as, dpi=dpi_file, facecolor=fig.get_facecolor(),
edgecolor='none')
if disp_on is True:
figManager = plt.get_current_fig_manager()
figManager.window.showMaximized()
plt.show()
else:
plt.close('all')
也许可以将这些组合起来,但我经常在绘图函数的开头调用set_face_color(),然后再构建子块网格,最后调用save_and_show()。我想它应该在任何一个地方都可以工作,但最理想的情况是,我希望保持函数分离,并且能够从最终的图中提取alpha传递到savefig()
编辑两千字
Alpha=0.5在左边,1在右边。
t = [1, 2, 3, 4, 5]
fig = plt.figure()
fig.patch.set_alpha(0.5)
fig.set_facecolor('b')
plt.plot(t, t)
fig2 = plt.figure()
fig2.set_facecolor('b')
plt.plot(t,t)