Erstellen eines Looking-Glasses mit Matplotlib

Beginner

This tutorial is from open-source community. Access the source code

Einführung

In diesem Lab werden Sie durch das Erstellen eines Looking-Glass-Effekts mit Mausereignissen in Matplotlib geführt. Dieses Beispiel ermöglicht es Ihnen, Daten in einem kreisförmigen Bereich zu untersuchen, der durch Klicken und Ziehen verschoben werden kann.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie während des Lernens Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Importieren der erforderlichen Bibliotheken

Wir müssen die Matplotlib-Bibliothek, die NumPy-Bibliothek und das Matplotlib-Patches-Modul importieren. Wir werden diese Bibliotheken verwenden, um unseren Looking-Glass-Effekt zu erstellen.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as patches

Generieren von Zufallsdaten

Wir werden zwei Sets von Zufallsdaten mit NumPy generieren. Diese Daten werden geplottet, um einen Streudiagramm zu erstellen.

## Fixing random state for reproducibility
np.random.seed(19680801)

x, y = np.random.rand(2, 200)

Erstellen der Figur und der Achsen

Wir werden das Figur- und Achsenobjekt mit der Funktion subplots() erstellen. Wir werden auch einen gelben Kreis-Patch zum Achsenobjekt mit der Funktion patches.Circle() hinzufügen.

fig, ax = plt.subplots()
circ = patches.Circle((0.5, 0.5), 0.25, alpha=0.8, fc='yellow')
ax.add_patch(circ)

Plotten der Daten

Wir werden die in Schritt 2 generierten Zufallsdaten mit der Funktion plot() zweimal plotten. Der erste Plot wird einen Alpha-Wert von 0,2 haben und der zweite Plot wird einen Alpha-Wert von 1,0 haben und einen Clip-Pfad auf den gelben Kreis-Patch gesetzt haben.

ax.plot(x, y, alpha=0.2)
line, = ax.plot(x, y, alpha=1.0, clip_path=circ)
ax.set_title("Left click and drag to move looking glass")

Erstellen des Ereignishandlers

Wir werden eine Ereignishandler-Klasse erstellen, die die Mausereignisse behandelt, die erforderlich sind, um den gelben Kreis-Patch im Plot zu bewegen. Diese Klasse wird drei Methoden enthalten: on_press(), on_release() und on_move().

class EventHandler:
    def __init__(self):
        fig.canvas.mpl_connect('button_press_event', self.on_press)
        fig.canvas.mpl_connect('button_release_event', self.on_release)
        fig.canvas.mpl_connect('motion_notify_event', self.on_move)
        self.x0, self.y0 = circ.center
        self.pressevent = None

    def on_press(self, event):
        if event.inaxes!= ax:
            return

        if not circ.contains(event)[0]:
            return

        self.pressevent = event

    def on_release(self, event):
        self.pressevent = None
        self.x0, self.y0 = circ.center

    def on_move(self, event):
        if self.pressevent is None or event.inaxes!= self.pressevent.inaxes:
            return

        dx = event.xdata - self.pressevent.xdata
        dy = event.ydata - self.pressevent.ydata
        circ.center = self.x0 + dx, self.y0 + dy
        line.set_clip_path(circ)
        fig.canvas.draw()

handler = EventHandler()
plt.show()

Ausführen des Programms

Führen Sie das Programm aus und klicken Sie mit der linken Maustaste und ziehen Sie den gelben Kreis-Patch, um ihn im Plot zu bewegen. Sie können diesen Effekt verwenden, um die Daten im Kreisbereich zu untersuchen.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man einen Looking-Glass-Effekt mit Mausereignissen in Matplotlib erstellt. Wir haben Zufallsdaten generiert, die Daten geplottet und eine Ereignishandler-Klasse erstellt, um Mausereignisse zu behandeln. Indem wir mit der linken Maustaste klicken und den gelben Kreis-Patch ziehen, konnten wir ihn im Plot bewegen und die Daten im Kreisbereich untersuchen.