gpt4 book ai didi

python - 保存时的 Matplotlib 图 facecolor alpha(背景色、透明度)

转载 作者:太空狗 更新时间:2023-10-29 21:52:49 28 4
gpt4 key购买 nike

上一个问题涉及使用 savefig() 以与屏幕上显示的相同的面色(背景色)保存,即:

fig = plt.figure()
fig.patch.set_facecolor('blue')
fig.savefig('foo.png', facecolor=fig.get_facecolor())

Matplotlib figure facecolor (background color)

(使用savefig()需要我们重新指定背景颜色。)

我还可以为透明度指定一个 alpha,例如:How to set opacity of background colour of graph wit Matplotlib

fig.patch.set_alpha(0.5)

我找不到一种方法来制作具有透明面部颜色的图形,就像它出现在屏幕上一样。文档似乎不完整:http://matplotlib.org/faq/howto_faq.html#save-transparent-figures - 未显示实际节省。将 transparent=Truesavefig() 一起使用并没有使 facecolor 透明的预期效果,相反,它似乎使除了轴图例之外的所有东西都在该颜色之上透明(包括图形背景)。

编辑:一些相关的代码摘录:

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 - 值(value)一千字

Alpha = 左边 0.5,右边 1。

image of code below

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)

最佳答案

我在 Matplotlib 1.5 上运行了您的代码,发现它为我生成了预期的输出。对于 future 发生的所有事情,我在下面给出了两种简明的方法来实现这一点。

请注意,您绝对不想将 transparent=True 设置为 savefig 的选项,因为这将覆盖 facecolors,正如您在 matplotlib.figure.savefig source 中看到的那样.

要真正解决您的问题,您发布的第二个链接How to set opacity of background colour of graph wit Matplotlib实际上解决了问题。问题中代码片段的问题是使用 fig.set_facecolor 而不是 fig.patch.set_facecolor

修复 1:

从上面的链接问题中使用 facecolor 参数来保存图

import matplotlib.pyplot as plt

fig = plt.figure()
fig.patch.set_facecolor('b') # instead of fig.patch.set_facecolor
fig.patch.set_alpha(0.5)

plt.plot([1,3], [1,3])
plt.tight_layout()
plt.show()
plt.savefig('method1.png', facecolor=fig.get_facecolor())

修复 2:

你也可以通过rcParams指定savefig facecolor。

import matplotlib.pyplot as plt
import matplotlib as mpl

fig = plt.figure()

col = 'blue'
#specify color of plot when showing in program.
#fig.set_facecolor(col) also works
fig.patch.set_facecolor(col)
#specify color of background in saved figure
mpl.rcParams['savefig.facecolor'] = col

#set the alpha for both plot in program and saved image
fig.patch.set_alpha(0.5)
plt.plot([1,3], [1,3])
plt.tight_layout()
plt.show()
plt.savefig('method2.png')

如果您希望轴具有背景,这些解决方案应保持背景不变(例如 Erotemic 评论中由 seaborn 生成的背景)。如果您想更明确地添加:

ax.patch.set_color('palegoldenrod') # or whatever color you like
ax.patch.set_alpha(.7)

轴补丁 alpha 将传输到 savefig,无需额外的努力。

请注意,在这两种情况下,我都使用了 plt.tight_layout() 来消除已保存图形中无用的额外空间。您可以在 matplotlib documentation 中阅读更多相关信息.

关于python - 保存时的 Matplotlib 图 facecolor alpha(背景色、透明度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542610/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com