Interaktive Datenvisualisierung mit Python Matplotlib

PythonPythonBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Labyrinth lernen Sie, wie Sie mit mehreren Zeichenflächen interagieren können. Indem Sie einen Punkt auf einer Achse auswählen und hervorheben, generieren Sie die Daten dieses Punktes auf der anderen Achse. Für dieses Labyrinth verwenden wir Python Matplotlib.

Tipps für die virtuelle Maschine

Nachdem der Start der virtuellen Maschine abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

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.

Bibliotheken importieren

Wir beginnen mit dem Import der erforderlichen Bibliotheken.

import numpy as np
import matplotlib.pyplot as plt

Daten generieren

Wir werden mit NumPy zufällige Daten generieren.

np.random.seed(19680801)
X = np.random.rand(100, 200)
xs = np.mean(X, axis=1)
ys = np.std(X, axis=1)

Figur und Achsen erstellen

Wir werden eine Figur mit zwei Achsen erstellen.

fig, (ax, ax2) = plt.subplots(2, 1)

Daten plotten

Wir werden die generierten Daten auf der ersten Achse plotten.

line, = ax.plot(xs, ys, 'o', picker=True, pickradius=5)

Punkt-Browser-Klasse erstellen

Wir werden eine Klasse erstellen, um die Funktionalität des Punkt-Browsers zu verwalten.

class PointBrowser:
    def __init__(self):
        self.lastind = 0

        self.text = ax.text(0.05, 0.95, 'ausgewählt: keines',
                            transform=ax.transAxes, va='top')
        self.selected, = ax.plot([xs[0]], [ys[0]], 'o', ms=12, alpha=0.4,
                                 color='gelb', visible=False)

    def on_press(self, event):
        if self.lastind is None:
            return
        if event.key not in ('n', 'p'):
            return
        if event.key == 'n':
            inc = 1
        else:
            inc = -1

        self.lastind += inc
        self.lastind = np.clip(self.lastind, 0, len(xs) - 1)
        self.update()

    def on_pick(self, event):

        if event.artist!= line:
            return True

        N = len(event.ind)
        if not N:
            return True

        ## die Klickpositionen
        x = event.mouseevent.xdata
        y = event.mouseevent.ydata

        distances = np.hypot(x - xs[event.ind], y - ys[event.ind])
        indmin = distances.argmin()
        dataind = event.ind[indmin]

        self.lastind = dataind
        self.update()

    def update(self):
        if self.lastind is None:
            return

        dataind = self.lastind

        ax2.clear()
        ax2.plot(X[dataind])

        ax2.text(0.05, 0.9, f'mu={xs[dataind]:1.3f}\nsigma={ys[dataind]:1.3f}',
                 transform=ax2.transAxes, va='top')
        ax2.set_ylim(-0.5, 1.5)
        self.selected.set_visible(True)
        self.selected.set_data(xs[dataind], ys[dataind])

        self.text.set_text('ausgewählt: %d' % dataind)
        fig.canvas.draw()

Ereignishandler verbinden

Wir werden die Ereignishandler mit der Figurcanvas verbinden.

browser = PointBrowser()

fig.canvas.mpl_connect('pick_event', browser.on_pick)
fig.canvas.mpl_connect('key_press_event', browser.on_press)

Diagramm anzeigen

Wir werden das Diagramm anzeigen.

plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man mit Python Matplotlib Daten mit mehreren Canvases interagieren kann. Wir haben eine Klasse erstellt, um die Funktionalität des Punkt-Browsers zu verwalten, und Ereignishandler mit der Figurcanvas verbunden, um Interaktivität zu ermöglichen.