2013-02-18 38 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由標籤和使用功能的價值,特別是如果你結了許多標記的藝術家鍵。