0

私はmatplotlibPatchCollectionを使用して、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が返されます。しかし、描かれるとはっきりと見えます。なぜこれが起こっているのかを誰かが私に理解するのを手伝ってくれるなら、私は非常に感謝するでしょう。

4

1 に答える 1

0

を作成するPatchCollectionと、渡したオブジェクト(形状、場所、スタイリング(使用する場合match_original))から大量の情報が抽出されますが、後で参照できるようにパッチオブジェクトは保持されません(パッチごとに破棄されますvisible) 。 。すべての長方形を一緒に表示/非表示にしたい場合は、次のことができます。

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

そうでなければ、一緒に表示したいセットにそれらをグループ化する必要があると思います。

(ここ)__init__の関数と、およびまでのカスケードの残りの部分を見てください。PatchCollectionCollectionArtist

于 2013-01-29T17:07:21.007 に答える