matplotlib.PatchCollection总是最后绘制的

时间:2013-01-24 22:52:08

标签: python matplotlib plot draw patch

我有一个matplotlib.PatchCollection我想要添加到情节中。但我也有文字和其他补丁我直接添加到情节。所以它看起来像这样:

node.shape = RegularPolygon((node.posX, node.posY),
                            6,
                radius = node.radius,
                                    edgecolor = 'none',
                                    facecolor = node.fillColor,
                                    zorder = node.zorder)


self.patches.append(node.shape)
self.p = PatchCollection(self.patches, edgecolor = 'none', match_original=True )       
self.plotAxes.add_collection(self.p) 

#Two previously instantiated patches (they are visible)
self.plotAxes.add_artist(selectionRect)
self.plotAxes.add_artist(brushShape)

self.plotCanvas.draw()

我希望首先绘制集合中的Pat,然后绘制selctionRectbrushShape,因为它们可以与集合中的Pat重叠。如果他们这样做,他们应该是可见的。但是,我的情节总是在集合中显示补丁,就像它们最后被绘制一样。我怎么能绕过这个?任何帮助表示赞赏。

编辑:似乎有效的一件事就是保留2个PatchCollections。然而,当我这样做时,似乎我永远不会将可见性设置为假。 PatchCollection是否将重置值​​设置为什么?

1 个答案:

答案 0 :(得分:0)

正如亚当在评论中所说的那样,你想设置zorder,它设置了什么顺序,当它们被绘制在彼此之上时,具有较高zorder的事物将与较低的zorder重叠。 1}}。

所有内容都有默认zorder,但您可以通过将zorder kwarg添加到函数调用来覆盖该值。它是一个Artist kwarg,所以基本上绘制函数应该尊重它(如果你找到一个不向github网站提交bug报告的话)

plt.figure()
ax = plt.gca()
ax.plot(range(5), zorder=2, lw=10)
ax.plot(range(5)[::-1], zorder=1, lw=10)

VS

plt.figure()
ax = plt.gca()
ax.plot(range(5), zorder=1, lw=10)
ax.plot(range(5)[::-1], zorder=2, lw=10)

zorder demo