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

问题描述 投票:0回答:3

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

python matplotlib alpha
3个回答
156
投票

如果您只想使图形和轴的整个背景都是透明的,则只需在使用

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,或者将面颜色设置为

'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


30
投票

另一种方法是设置适当的 global

rcParams
并简单地指定 colors。这是一个 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 参数
savefig.transparent
设置为
True
,这将所有面部颜色的 alpha 设置为 0%。

请注意,更改

rcParams
会产生 全局效果,因此请记住,您的所有绘图都会受到这些更改的影响。但是,如果您有多个绘图,或者您想要更改无法更改源代码的绘图的外观,则此解决方案可能非常有用。


0
投票

一个额外的重要变量:如果出于某种原因将图形的frameon值切换为false,您将不会看到面部颜色或alpha变化对最终绘图有任何影响

© www.soinside.com 2019 - 2024. All rights reserved.