如何使用Matplotlib设置图形背景颜色的不透明度

100

我一直在尝试使用Matplotlib,但不知道如何更改图表的背景颜色,或者如何使背景完全透明。


面颜色/设置面颜色? - crnlx
6
如何使用set_facecolor? - user179169
2个回答

155
如果您只想使整个图像和轴的背景透明,可以在使用fig.savefig保存图像时,简单地指定transparent=True
例如:
import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot(range(10))
fig.savefig('temp.png', transparent=True)

如果你想要更细致的控制,可以简单地设置图和轴背景补丁的面颜色和/或透明度值。(为了使补丁完全透明,我们可以将透明度设置为0,或者将面颜色设置为'none'(作为字符串,而不是对象None!))

例如:

import matplotlib.pyplot as plt

fig = plt.figure()

fig.patch.set_facecolor('blue')
fig.patch.set_alpha(0.7)

ax = fig.add_subplot(111)

ax.plot(range(10))

ax.patch.set_facecolor('red')
ax.patch.set_alpha(0.5)

# If we don't specify the edgecolor and facecolor for the figure when
# saving with savefig, it will override the value we set earlier!
fig.savefig('temp.png', facecolor=fig.get_facecolor(), edgecolor='none')

plt.show()

alt text


4
facecolor设置为“无色”对我没有起作用;将alpha设置为0.0则有效。 - Nico Schlömer
3
对我来说,将facecolor设置为"None"确实有效。将其设置为None是无效的。 - Spenhouet
如果不使用savefig呢?我试图写入缓冲区。 - alphabetasoup
@alphabetasoup 设置相应的全局 rcParams 应该可以解决问题,请参见下面的我的回答 - Andreas Schörgenhumer

29
另一种方法是设置适当的全局rcParams并简单指定colors。以下是一个最小化的示例(我使用RGBA颜色格式来指定alpha/opacity):
import matplotlib.pyplot as plt

plt.rcParams.update({
    "figure.facecolor":  (1.0, 0.0, 0.0, 0.3),  # red   with alpha = 30%
    "axes.facecolor":    (0.0, 1.0, 0.0, 0.5),  # green with alpha = 50%
    "savefig.facecolor": (0.0, 0.0, 1.0, 0.2),  # blue  with alpha = 20%
})

plt.plot(range(10))
plt.savefig("temp.png")
plt.show()
< p > figure.facecolor 是主要的背景颜色,而 axes.facecolor 是实际绘图的背景颜色。由于某种原因,plt.savefig 使用 savefig.facecolor 作为主要的背景颜色,而不是 figure.facecolor,因此请确保相应地更改此参数。< /p> < p >plt.show() 的输出如下:< /p>

enter image description here

plt.savefig("temp.png") 会生成如下输出:

enter image description here

如果你想让某物完全透明,只需将相应颜色的alpha值设置为0。对于plt.savefig,还有一个“懒惰”的选项,即将rc参数savefig.transparent设置为True,这会将所有facecolors的alpha设置为0%。
请注意,更改rcParams会产生全局影响,因此请记住,所有绘图都将受到这些更改的影响。但是,如果你有多个图,或者想要更改不能更改源代码的图的外观,则此解决方案可能非常有用。

我也认为使用RGBA alpha通道是最优雅的。 - DaveL17

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接