Ich habe den Code geschrieben, um den Boxbereich mit der Maus auf dem Plot von matplotlib
auszuwählen und das Ergebnis (Koordinaten) zu erhalten. Um dies zu erreichen, verwenden wir ein Modul namens "matplotlib.widgets". Natürlich ist [Beispielcode] [Beispielcode], der in matplotlib.org aufgeführt ist, in Ordnung, aber da Koordinaten nicht so gespeichert werden können, wie sie sind, ist es notwendig, sie wie in der folgenden Klasse zu implementieren. Ich denke, dort ist. Außerdem habe ich es so angeordnet, dass das farbige Feld nach der Bestätigung des Bereichs erhalten bleibt (in [Beispielcode] [Beispielcode] verschwindet das Feld nach Bestätigung).
rectselect.py
Importieren und verwenden Sie die folgende rectselect.py
als Modul. Die Funktion "Freigeben" ist an der Anordnung der farbigen Kästchen beteiligt. Wenn Sie das Kästchen nach der Bestätigung löschen möchten, können Sie die Zeile "Freigeben" auskommentieren.
rectselect.py
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from matplotlib.widgets import RectangleSelector
class RectSelect(object):
def __init__(self, ax=None):
self.ax = ax or plt.gca()
self.rect = Rectangle((0,0), 0, 0, color='orange', alpha=0.5)
self.ax.add_patch(self.rect)
self.blc = np.zeros(2)
self.trc = np.zeros(2)
def selector(event):
if event.key in ['Q', 'q'] and selector.RS.active:
print ('RectSelect deactivated.')
selector.RS.set_active(False)
if event.key in ['A', 'a'] and not selector.RS.active:
print ('RectSelect activated.')
selector.RS.set_active(True)
selector.RS = RectangleSelector(self.ax, self.callback)
self.ax.figure.canvas.mpl_connect('key_press_event', selector)
self.ax.figure.canvas.mpl_connect('button_release_event', self.release)
def callback(self, eclick, erelease):
x0, x1 = eclick.xdata, erelease.xdata
y0, y1 = eclick.ydata, erelease.ydata
self.blc = min(x0, x1), min(y0, y1)
self.trc = max(x0, x1), max(y0, y1)
blc_print = '({:0.4},{:0.4})'.format(*self.blc)
trc_print = '({:0.4},{:0.4})'.format(*self.trc)
print('blc={}, trc={}'.format(blc_print, trc_print))
def release(self, event):
self.rect.set_width(self.trc[0] - self.blc[0])
self.rect.set_height(self.trc[1] - self.blc[1])
self.rect.set_xy(self.blc)
self.ax.figure.canvas.draw()
In der Praxis funktioniert es, wenn Sie eine RectSelect
-Instanz direkt vor plt.show ()
einfügen. Sie können die Zielachsen auch explizit angeben. Unten ist der tatsächliche Betrieb.
python
import numpy as np
import matplotlib.pyplot as plt
from rectselect import RectSelect
#Etwas Verschwörung
x = np.random.random(20) * 10
y = np.random.random(20) * 10
plt.plot(x,y,'.')
#Boxauswahl
region = RectSelect()
plt.show()
#Unten links in der Box(blc)Und oben rechts(trc)Koordinaten von anzeigen
print(region.blc) # --> (2.338709677419355, 3.7239583333333335)
print(region.trc) # --> (8.4879032258064502, 8.671875)
Der ausgewählte Bereich wird von einer Linie umgeben angezeigt.
Der ausgewählte Bereich wird ausgefüllt und angezeigt.