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


69

我一直在玩Matplotlib,我不知道如何更改图形的背景颜色,或者如何使背景完全透明。


facecolor / set_facecolor?
crnlx 2011年

6
但是如何使用set_facecolor?

Answers:


112

如果只希望图形和轴的整个背景都是透明的,则可以transparent=True在保存图形时简单地指定fig.savefig

例如:

import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot(range(10))
fig.savefig('temp.png', transparent=True)

如果要进行更细粒度的控制,则只需设置图形和轴背景色块的面色和/或Alpha值即可。(要使补丁完全透明,我们可以将alpha设置为0,或将facecolor设置为'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()

替代文字


4
将设置facecolor'none'不适用于我;设置alpha0.0做了。
NicoSchlömer2013年

3
对我来说,将facecolor设置为"None"有效。将其设置为None无效。
Spenhouet

如果不使用savefig怎么办?我正在尝试写入缓冲区。
alphabetasoup

@alphabetasoup设置相应的全局rcParams应该可以解决问题,请参见下面的答案
AndreasSchörgenhumer20年

13

另一种方法是设置适当的全局 颜色,rcParams然后简单地指定颜色。这是MWE(我使用RGBA颜色格式指定Alpha /不透明度):

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()

figure.facecolor是主要的背景颜色和axes.facecolor主线剧情的背景色。无论出于何种原因,请plt.savefig使用savefig.facecolor而不是作为主要背景色figure.facecolor,因此请确保相应地更改此参数。

plt.show() 从上面的代码中得到以下输出:

在此处输入图片说明

plt.savefig("temp.png")产生以下输出:

在此处输入图片说明

如果要使某些东西完全透明,只需将相应颜色的alpha值设置为0。对于plt.savefig,还有一个“懒惰”选项,方法是将rc-parameter设置savefig.transparentTrue,它将所有面部颜色的alpha设置为0%。

需要注意的是改变rcParams有一个全球性的影响,所以请记住,所有的地块将受到这些变化的影响。但是,如果您有多个图,或者要更改无法更改源代码的图的外观,则此解决方案可能非常有用。


我也认为使用RGBA alpha通道是最优雅的方法。
DaveL17 '20
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.