我添加到图表中的补丁在alpha = 1时不是不透明的。为什么?

时间:2011-03-22 11:48:06

标签: python matplotlib

我想在图表上添加一个矩形。通过我发现的所有文档,默认情况下矩形应该是不透明的,透明度由alpha参数控制。但是,我不能让矩形显示为不透明,即使alpha = 1.我做错了什么,或者我还需要了解图表与补丁交互的方式吗?

这是一个玩具示例:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from pylab import *

x = np.arange(10)
y = x
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y)

rect = patches.Rectangle( ( 2,3 ), 2, 2, alpha = 1, ec = "gray", fc = "CornflowerBlue", visible = True)
ax.add_patch(rect)

plt.show()

2 个答案:

答案 0 :(得分:11)

来自documentation

  

在一个轴内,顺序为   各种线条,标记,文字,   集合等出现是确定的   通过   matplotlib.artist.Artist.set_zorder()   属性。默认顺序是   补丁,行,文本,集合   线和补丁集合   出现在与常规相同的水平   线和补丁分别。

因此默认情况下会在线条下面绘制补丁。您可以通过指定矩形的zorder来更改顺序:

# note alpha is None and visible is True by default
rect = patches.Rectangle((2, 3), 2, 2, ec="gray", fc="CornflowerBlue", zorder=10)

您可以通过将ax.plot(x, y)更改为lines = ax.plot(x, y)并添加新的代码行print lines[0].zorder来检查地块上行的zorder。当我这样做时,该行的zorder为2.因此,矩形将需要zorder > 2来模糊该行。

答案 1 :(得分:0)

您选择的facecolor(CornflowerBlue)具有半透明的外观,但实际上您看到的颜色对于alpha = 1是正确的。尝试使用不同的颜色,例如“蓝色”。 Matplotlib似乎确实将矩形贴片放在线下,但我不认为这是透明度问题。