Matplotlib: ziehen Sie einen Auswahlbereich, in der Form eines Rechtecks mit der Maus
Ich möchte in der Lage sein, ziehen Sie einen Auswahlbereich auf eine matplotlib Grundstück mit einem Maus-Ereignis. Ich weiß nicht, wie es mit python.
In das Ende, ich will in der Lage sein, um einen auswertungsbereich mit meiner Maus auf einer Karte erstellt mit matplotlib Grundkarte und rufen Sie die Eck-Koordinaten.
Jemand eine Idee, Beispiel, Referenzen?
Dank,
Greg
class Annotate(object):
def __init__(self):
self.ax = plt.gca()
self.rect = Rectangle((0,0), 1, 1, facecolor='None', edgecolor='green')
self.x0 = None
self.y0 = None
self.x1 = None
self.y1 = None
self.ax.add_patch(self.rect)
self.ax.figure.canvas.mpl_connect('button_press_event', self.on_press)
self.ax.figure.canvas.mpl_connect('button_release_event', self.on_release)
self.ax.figure.canvas.mpl_connect('motion_notify_event', self.on_motion)
def on_press(self, event):
print 'press'
self.x0 = event.xdata
self.y0 = event.ydata
self.x1 = event.xdata
self.y1 = event.ydata
self.rect.set_width(self.x1 - self.x0)
self.rect.set_height(self.y1 - self.y0)
self.rect.set_xy((self.x0, self.y0))
self.rect.set_linestyle('dashed')
self.ax.figure.canvas.draw()
def on_motion(self,event):
if self.on_press is True:
return
self.x1 = event.xdata
self.y1 = event.ydata
self.rect.set_width(self.x1 - self.x0)
self.rect.set_height(self.y1 - self.y0)
self.rect.set_xy((self.x0, self.y0))
self.rect.set_linestyle('dashed')
self.ax.figure.canvas.draw()
def on_release(self, event):
print 'release'
self.x1 = event.xdata
self.y1 = event.ydata
self.rect.set_width(self.x1 - self.x0)
self.rect.set_height(self.y1 - self.y0)
self.rect.set_xy((self.x0, self.y0))
self.rect.set_linestyle('solid')
self.ax.figure.canvas.draw()
print self.x0,self.x1,self.y0,self.y1
return [self.x0,self.x1,self.y0,self.y1]
Du musst angemeldet sein, um einen Kommentar abzugeben.
Matplotlib bietet seine eigenen
RectangleSelector
. Es ist ein Beispiel auf die matplotlib-Seite, die können Sie an Ihre Bedürfnisse anpassen.Eine vereinfachte version würde in etwa so Aussehen:
Hier ist ein kleines Beispiel, das zeigt, wie Sie die Maus zum zeichnen eines Rechtecks auf eine matplotlib Grundstück.
self.ax.figure.canvas.mpl_connect('motion_notify_event', self.on_motion)
und eine Methode definieren, on_motion das tut, was Sie wollen. Siehe matplotlib.sourceforge.net/examples/event_handling/index.html. Um zu sehen, was Rechteck Eigenschaften, die Sie Bearbeiten können, finden Sie unter matplotlib.sourceforge.net/api/...