2013-02-18 40 views
0

我有2个colorbars,我想他们两个有不同pickevents 我怎样才能做到这一点? 我的代码大气压是2挑赛事2个colorbars

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只是强调了在图中的部分

我怎样才能为每个彩条添加一个单独的选择事件?

回答

0

你挑的事件连接到canvas,你只有每canvas得到一个选秀活动。您需要添加,可以告诉它在处理与艺术家代码的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由标签和使用功能的价值,特别是如果你结了许多标记的艺术家键。