我添加到图形的补丁为什么在alpha=1时不不透明?
我想在图表上添加一个矩形。根据我找到的所有文档,矩形默认应该是完全不透明的,透明度是通过一个叫做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
你选择的颜色(玉米花蓝)看起来有点半透明,但实际上你看到的颜色在透明度为1的时候是正确的。试试换个颜色,比如'蓝色'。Matplotlib确实把这个矩形放在了线的下面,但我觉得这并不是透明度的问题。
11
来自文档:
在一个坐标轴内,各种线条、标记、文本、集合等出现的顺序是由matplotlib.artist.Artist.set_zorder()这个属性决定的。默认的顺序是:图形(patches)在下面,线条(lines)在上,文本(text)在更上面。而线条的集合和图形的集合会和普通的线条和图形处于同一层级。
所以,默认情况下,图形会画在线条的下面。你可以通过指定矩形的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)
来检查你图中线条的zorder,然后再加一行代码:print lines[0].zorder
。我这样做的时候,线条的zorder
是2。因此,矩形的zorder
需要大于2,才能把线条遮住。