2014-01-18 68 views
1

因此,在matplotlib縮放中,當縮放時按'x'或'y'只會縮放x或y軸。我想稍微修改一下NavigationToolbar2在backend_bases.py中的子類Matplotlib:確定鼠標在軸文本矩形中的位置

具體來說,已經放置了我的座標軸),或者在圖的左側或右側,選擇使用_zoom_mode ='x'或'y'進行放大。 (除了保持默認縮放當鼠標是小區裏面RECT功能。)

看着backend_bases,看來我需要修改的方法是press_zoom

def press_zoom(self, event): 
    if event.button=1: 
      self._button_pressed=1 
    elif event.button == 3: 
     self._button_pressed=3 
    else: 
     self._button_pressed=None 
     return 

    x, y = event.x, event.y 

    # push the current view to define home if stack is empty 
    if self._views.empty(): self.push_current() 

    self._xypress=[] 
    for i, a in enumerate(self.canvas.figure.get_axes()): 
     if (x is not None and y is not None and a.in_axes(event) and 
      a.get_navigate() and a.can_zoom()) : 
      self._xypress.append((x, y, a, i, a.viewLim.frozen(), 
            a.transData.frozen())) 

    id1 = self.canvas.mpl_connect('motion_notify_event', self.drag_zoom) 

    id2 = self.canvas.mpl_connect('key_press_event', 
            self._switch_on_zoom_mode) 
    id3 = self.canvas.mpl_connect('key_release_event', 
            self._switch_off_zoom_mode) 

    self._ids_zoom = id1, id2, id3 

    self._zoom_mode = event.key 


    self.press(event) 

,並添加ELIF到那裏的大if語句並使用它來設置縮放模式,但是我還不知道(還)是如何判斷鼠標是否位於適合'x'或'y'縮放模式的區域。

那麼,我該如何判斷鼠標是否在一個陰謀之外?

回答

0

通過將x和y座標轉換爲軸座標。你可以知道它們是否在軸外,如果它們小於0或大於1.

下面是它如何工作的一個簡單示例。

def is_just_outside(fig, event): 
    x,y = event.x, event.y 
    print x, y 
    for ax in fig.axes: 
     xAxes, yAxes = ax.transAxes.inverted().transform([x, y]) 
     print xAxes, yAxes 
     if (-0.02 < xAxes < 0) | (1 < xAxes < 1.02): 
      print "just outside x-axis" 
     if (-0.02 < yAxes < 0) | (1 < yAxes < 1.02): 
      print "just outside y-axis" 

x = np.linspace(-np.pi,np.pi,100) 
y = np.sin(x) 
fig = plt.figure() 
plt.plot(x,y) 
ax = fig.add_subplot(111) 
fig.canvas.mpl_connect('button_press_event', lambda e: is_just_outside(fig, e)) 
plt.show() 
+0

這工作完美!我不知道如何以這種方式獲取座標軸。謝謝。 – Ihall

相關問題