之前的问题涉及使用savefig()
以与屏幕上显示的相同面颜色(背景色)保存,即:
fig = plt.figure()
fig.patch.set_facecolor('blue')
fig.savefig('foo.png', facecolor=fig.get_facecolor())
(使用savefig()
需要重新指定背景颜色。)
我还可以指定透明度,例如:如何在Matplotlib中设置图形的背景颜色的不透明度
fig.patch.set_alpha(0.5)
我找不到一种方法使带有透明背景颜色的图形保存为屏幕上显示的样子。文档对此似乎不完整:http://matplotlib.org/faq/howto_faq.html#save-transparent-figures - 实际保存并未展示。使用savefig()
和transparent=True
无法使面颜色透明,相反,它似乎会使除轴图例以外的所有东西都变成该颜色的透明度(包括图形背景)。
编辑:一些相关代码摘录:
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()
。编辑2-一图胜千言
左侧Alpha = 0.5,右侧为1。
![image of code below](https://istack.dev59.com/8LKwA.webp)
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)
facecolor=(1, 1, 1, 0)
。 - David ZwickercolorConverter.to_rgba()
,这样我就可以只使用set_facecolor()
而跳过set_alpha()
,但显然fig.savefig(..., facecolor=fig.get_facecolor())
要么不返回4元组,要么忽略alpha。我在程序的其他地方设置了facecolor - 将其编码为数据值,以便当我翻阅绘图时可以快速排序 - 因此,虽然我可以携带该值并稍后将其传递给savefig
,但我最希望能够从fig中提取它。 - schodge