为什么PatchCollectin会覆盖可见性?

时间:2013-01-29 16:53:23

标签: python collections matplotlib patch visible

我正在使用matplotlib PatchCollection来保存一堆matplotlib.patches.Rectangles。但我希望它们在第一次绘制时不可见(只有在点击其他内容时才可见)。当我使用add_artist将Rectangle直接绘制到画布时,这可以正常工作,但我想将其更改为使用PatchCollection。出于某种原因,当我创建PatchCollection并使用add_collection添加它们时,它们都是可见的。

self.plotFigure = Figure()
self.plotAxes = self.plotFigure.add_subplot(111)

self.selectionPatches = []
for node in self.nodeList:
    node.selectionRect = Rectangle((node.posX - node.radius*0.15 , node.posY - node.radius*0.15),
                                    node.radius*0.3,
                                    node.radius*0.3,
                                    linewidth = 0,
                                    facecolor = mpl.colors.ColorConverter.colors['k'],
                                    zorder = z,
                                    visible = False)
    self.selectionPatches.append(node.selectionRect)

self.p3 = PatchCollection(self.selectionPatches, match_original=True)
self.plotAxes.add_collection(self.p3)

如果我遍历self.selectionPatches并打印出每个Rectangle的get_visible(),则返回false。但是当它们被吸引时它们清晰可见。如果有人能帮助我了解为什么会发生这种情况,我将非常感激。

1 个答案:

答案 0 :(得分:0)

创建PatchCollection时,它会从您提交的对象中提取一大堆信息(形状,位置,样式(如果您使用match_original)),但不保留修补程序对象周围供以后参考(因此它会丢弃每个补丁visible)。如果您希望所有矩形一起可见/不可见,您可以

self.p3 = PatchCollection(self.selectionPatches, 
                          match_original=True, 
                          visible=False)

另外,我认为你必须将它们分组到想要一起出现的集合中。

查看__init__ (here)PatchCollection函数以及CollectionArtist的其他级联。