Einführung
In diesem Lab lernst du, wie du die Matplotlib-Bibliothek verwendest, um einen interaktiven Plot zu erstellen, der es Benutzern ermöglicht, eine Reihe von Punkten mit einem Lasso-Werkzeug auszuwählen. Du wirst auch lernen, wie du eine Callback-Funktion verwendest, um die Farbe der ausgewählten Punkte zu ändern.
Tipps für die virtuelle Maschine
Nachdem der Start der virtuellen Maschine abgeschlossen ist, klicke in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.
Manchmal musst du einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.
Wenn du während des Lernens Probleme stellst, kannst du Labby gerne fragen. Gib nach der Sitzung Feedback, und wir werden das Problem für dich prompt beheben.
Bibliotheken importieren
Zunächst importieren wir die erforderlichen Bibliotheken für das Lab. Wir werden matplotlib verwenden, um den Plot zu erstellen, und numpy, um zufällige Daten zu generieren.
import matplotlib.pyplot as plt
import numpy as np
Erstellen der LassoManager-Klasse
Als nächstes erstellen wir die LassoManager-Klasse, die die Lasso-Funktionalität behandelt. Die __init__-Methode initialisiert das Plot- und das Collection-Objekt. Die callback-Methode ändert die Farbe der ausgewählten Punkte, und die on_press- und on_release-Methoden behandeln die Mausereignisse.
class LassoManager:
def __init__(self, ax, data):
## Die Information darüber, ob ein Punkt ausgewählt wurde oder nicht, wird im
## Array der Collection gespeichert (0 = draußen, 1 = drinnen), das dann
## farbzugeordnet wird zu blau (draußen) und rot (drinnen).
self.collection = RegularPolyCollection(
6, sizes=(100,), offset_transform=ax.transData,
offsets=data, array=np.zeros(len(data)),
clim=(0, 1), cmap=mcolors.ListedColormap(["tab:blue", "tab:red"]))
ax.add_collection(self.collection)
canvas = ax.figure.canvas
canvas.mpl_connect('button_press_event', self.on_press)
canvas.mpl_connect('button_release_event', self.on_release)
def callback(self, verts):
data = self.collection.get_offsets()
self.collection.set_array(path.Path(verts).contains_points(data))
canvas = self.collection.figure.canvas
canvas.draw_idle()
del self.lasso
def on_press(self, event):
canvas = self.collection.figure.canvas
if event.inaxes is not self.collection.axes or canvas.widgetlock.locked():
return
self.lasso = Lasso(event.inaxes, (event.xdata, event.ydata), self.callback)
canvas.widgetlock(self.lasso) ## erhalte ein Sperrrecht auf das Widget-Zeichnen
def on_release(self, event):
canvas = self.collection.figure.canvas
if hasattr(self, 'lasso') and canvas.widgetlock.isowner(self.lasso):
canvas.widgetlock.release(self.lasso)
Erstellen des Plots
Jetzt verwenden wir die LassoManager-Klasse, um einen interaktiven Plot zu erstellen. Die np.random.rand-Funktion generiert zufällige Datenpunkte, die geplottet werden.
if __name__ == '__main__':
np.random.seed(19680801)
ax = plt.figure().add_subplot(
xlim=(0, 1), ylim=(0, 1), title='Lasso points using left mouse button')
manager = LassoManager(ax, np.random.rand(100, 2))
plt.show()
Zusammenfassung
In diesem Lab hast du gelernt, wie du Matplotlib verwendest, um einen interaktiven Plot zu erstellen, der es Benutzern ermöglicht, eine Reihe von Punkten mit einem Lasso-Werkzeug auszuwählen. Du hast auch gelernt, wie du eine Callback-Funktion verwendest, um die Farbe der ausgewählten Punkte zu ändern. Diese Funktionalität kann auf andere Projekte, die interaktive Datenselektion erfordern, erweitert werden.