0

2つのカラーバーがあり、両方に異なるピックイベントを設定したいのですが、どうすればよいですか?私のコードATMは

    x_ax.set_picker(5)##colorbar set picker

def on_pick(event):
    artist = event.artist
    val = event.mouseevent.ydata
    xal = event.mouseevent.xdata
    if highlight == 1 :
        print 'hello'
        global highlight
        highlight = 0
        self.canvas.draw()
    if highlight == 0 :
        highlight = 2
        trans = transforms.blended_transform_factory(self.ax.transAxes,self.ax.transData )
        rect = patches.Rectangle((0,1),width=5, height=5, transform=trans, color='yellow',alpha=0.5)
        self.ax.add_patch(rect)
        self.canvas.draw()
        rect.remove()


    else:
        self.canvas.draw()
        trans = transforms.blended_transform_factory(self.ax.transAxes,self.ax.transData )
        rect = patches.Rectangle((0,10),width=25, height=25, transform=trans, color='yellow',alpha=0.5)
        self.ax.add_patch(rect)
        highlight = 1

        self.canvas.draw()
        rect.remove()


self.canvas = FigureCanvas(self, -1, self.fig)
self.canvas.mpl_connect('pick_event',on_pick)

追加x2_ax.setpicker(5)self.canvas.mpl.connect('pick_event', on_click) てみましたが、どちらかのカラーバーをクリックすると、両方とも実行されたようです。

私のon_pickは、グラフ上のセクションを強調表示するだけです

カラーバーごとに個別のピックイベントを追加するにはどうすればよいですか?

4

1 に答える 1

0

ピックイベントをに接続していて、canvasごとに1つのピックイベントしか取得できませんcanvason_pickどのアーティストを扱っているかを知ることができるコードを追加する必要があります。これはクロージャーを使用して行うことができます。少し単純でエレガントではない方法はlabel、軸にを追加することです。

x_ax.set_label('x')
y_ax.set_label('y')

そしてあなたのon_pick

def on_pick(event):
    #some code here
    art = event.artist
    if isinstance(art, matplotlib.axes.Axes):
        # the artist is as axes
        if art.get_label() == 'x':
            # do one thing
            pass
        elif art.get_label() == 'y':
            # do another thing
            pass

dict特に多くのラベル付きアーティストがいる場合は、ラベルと関数を使用して値をキー設定することで、少しうまくいく可能性があります。

于 2013-02-19T00:14:49.303 に答える