2个选择事件2个色条

2024-05-16 19:06:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有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只是在图表上突出显示一个部分

如何为每个色条添加单独的pick事件???你知道吗


Tags: rectselfeventtransartiston事件transform
1条回答
网友
1楼 · 发布于 2024-05-16 19:06:36

您正在将pick事件连接到canvas,并且每个canvas只能获得一个pick事件。你需要在你的on_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键控标签和函数的值,特别是如果你结束了许多标签艺术家。你知道吗

相关问题 更多 >