Interaktive Plots#

Interaktivität kann beim Erkunden von Plots von unschätzbarem Wert sein. Die in den Matplotlib-GUI-Fenstern integrierten Werkzeuge zum Verschieben/Zoomen und für die Mausposition sind oft ausreichend, aber Sie können auch das Ereignissystem verwenden, um benutzerdefinierte Tools zur Datenexploration zu erstellen.

Siehe auch

Einführung in Plots.

Matplotlib wird mit Backends geliefert, die an mehrere GUI-Toolkits (Qt, Tk, Wx, GTK, macOS, JavaScript) gebunden sind, und Drittanbieterpakete bieten Bindungen an kivy und Jupyter Lab. Damit die Plots auf Maus-, Tastatur- und Malereignisse reagieren, muss die GUI-Ereignisschleife mit einer interaktiven Eingabeaufforderung integriert werden. Wir empfehlen die Verwendung von IPython (siehe unten).

Das Modul pyplot bietet Funktionen zur expliziten Erstellung von Plots, die interaktive Werkzeuge, eine Werkzeugleiste, eine Quickinfo und Tastenbelegungen enthalten.

pyplot.figure

Erstellt einen neuen leeren Figure oder wählt eine vorhandene aus.

pyplot.subplots

Erstellt eine neue Figure und füllt sie mit einem Gitter von Axes.

pyplot.gcf

Ruft die aktuelle Figure ab. Wenn sich keine aktuelle Figure auf dem Pyplot-Figurenstapel befindet, wird eine neue Figure erstellt.

pyplot.gca

Ruft die aktuellen Axes ab. Wenn sich keine aktuellen Achsen auf der Figure befinden, werden neue erstellt.

Fast alle Funktionen in pyplot werden wie angemessen an die aktuelle Figure / Axes weitergeleitet (oder erstellt eine).

Matplotlib speichert eine Referenz auf alle geöffneten Plots, die über pyplot.figure oder pyplot.subplots erstellt wurden, damit die Plots nicht vom Garbage Collector bereinigt werden. Figures können einzeln über pyplot.close geschlossen und von pyplot abgemeldet werden; alle offenen Figures können über plt.close('all') geschlossen werden.

Siehe auch

Weitere Informationen zum Matplotlib-Ereignissystem und zu integrierten Ereignisschleifen finden Sie unter: - Interaktive Plots und asynchrone Programmierung - Ereignisbehandlung und Auswahl

IPython-Integration#

Wir empfehlen die Verwendung von IPython für eine interaktive Shell. Zusätzlich zu all seinen Funktionen (verbesserte Tab-Vervollständigung, Magics, mehrzeilige Bearbeitung usw.) stellt es auch sicher, dass die GUI-Toolkit-Ereignisschleife ordnungsgemäß mit der Befehlszeile integriert ist (siehe Integration mit der Eingabeaufforderung).

In diesem Beispiel erstellen und ändern wir eine Figure über eine IPython-Eingabeaufforderung. Die Figure wird in einem QtAgg-GUI-Fenster angezeigt. Um die Integration zu konfigurieren und den interaktiven Modus zu aktivieren, verwenden Sie den `%matplotlib`-Magic-Befehl.

In [1]: %matplotlib
Using matplotlib backend: QtAgg

In [2]: import matplotlib.pyplot as plt

Erstellen Sie ein neues Plotfenster.

In [3]: fig, ax = plt.subplots()

Fügen Sie dem Fenster ein Liniendiagramm der Daten hinzu.

In [4]: ln, = ax.plot(range(5))

Ändern Sie die Farbe der Linie von Blau zu Orange.

In [5]: ln.set_color('orange')

Wenn Sie das automatische Neuberechnen des Plots deaktivieren möchten.

In [6]: plt.ioff()

Wenn Sie das automatische Neuberechnen des Plots wieder aktivieren möchten.

In [7]: plt.ion()

In neueren Versionen von Matplotlib und IPython reicht es aus, matplotlib.pyplot zu importieren und pyplot.ion aufzurufen. Die Verwendung des `%`-Magic-Befehls ist in allen Versionen von Matplotlib und IPython garantiert.

Interaktiver Modus#

pyplot.ion

Aktiviert den interaktiven Modus.

pyplot.ioff

Deaktiviert den interaktiven Modus.

pyplot.isinteractive

Gibt zurück, ob Plots nach jedem Plotbefehl aktualisiert werden.

pyplot.show

Zeigt alle geöffneten Plots an.

pyplot.pause

Führt die GUI-Ereignisschleife für interval Sekunden aus.

Steuerung des interaktiven Modus

  • ob erstellte Plots automatisch angezeigt werden

  • ob Änderungen an Künstlern automatisch das Neuberechnen vorhandener Plots auslösen

  • wenn pyplot.show() ohne Argumente zurückkehrt: sofort oder nachdem alle Plots geschlossen wurden

Wenn im interaktiven Modus

  • neu erstellte Plots werden sofort angezeigt

  • Plots werden automatisch neu gezeichnet, wenn Elemente geändert werden

  • pyplot.show() zeigt die Plots an und kehrt sofort zurück.

Wenn nicht im interaktiven Modus

Wenn Sie sich im nicht-interaktiven Modus befinden (oder Plots im nicht-interaktiven Modus erstellt haben), müssen Sie möglicherweise explizit pyplot.show aufrufen, um die Fenster auf Ihrem Bildschirm anzuzeigen. Wenn Sie die GUI-Ereignisschleife nur für eine begrenzte Zeit ausführen möchten, können Sie pyplot.pause verwenden. Dies blockiert den Fortschritt Ihres Codes, als ob Sie time.sleep aufgerufen hätten, stellt sicher, dass das aktuelle Fenster angezeigt und bei Bedarf neu gezeichnet wird, und führt die GUI-Ereignisschleife für den angegebenen Zeitraum aus.

Die Integration der GUI-Ereignisschleife mit Ihrer Eingabeaufforderung und die Tatsache, dass sich die Plots im interaktiven Modus befinden, sind voneinander unabhängig. Wenn Sie versuchen, pyplot.ion zu verwenden, ohne die Ereignisschleifenintegration zu arrangieren, werden Ihre Plots angezeigt, sind aber während der Eingabeaufforderung, die auf Eingaben wartet, nicht interaktiv. Sie können nicht schwenken/zoomen, und der Plot wird möglicherweise nicht einmal gerendert (das Fenster kann schwarz, transparent oder als Schnappschuss des darunter liegenden Desktops erscheinen). Umgekehrt, wenn Sie die Ereignisschleifenintegration konfigurieren, sind angezeigte Plots auch dann reaktionsfähig, wenn Sie an der Eingabeaufforderung auf Eingaben warten, unabhängig vom "interaktiven Modus" von Pyplot.

Unabhängig von der Kombination aus Einstellung des interaktiven Modus und Integration der Ereignisschleife sind Plots reaktionsfähig, wenn Sie pyplot.show(block=True), pyplot.pause verwenden oder die GUI-Hauptschleife auf andere Weise ausführen.

Warnung

Mit Figure.show ist es möglich, eine Figure auf dem Bildschirm anzuzeigen, ohne die Ereignisschleife zu starten und ohne sich im interaktiven Modus zu befinden. Dies funktioniert möglicherweise (abhängig vom GUI-Toolkit), führt aber wahrscheinlich zu einem nicht reaktionsfähigen Plot.

Standard-UI#

Die von pyplot erstellten Fenster verfügen über eine interaktive Werkzeugleiste mit Navigationsschaltflächen und einer Anzeige der Datenwerte, auf die der Cursor zeigt.

Interaktive Navigation#

../../../_images/toolbar.png

Alle Plotfenster werden mit einer Navigationswerkzeugleiste geliefert, die zur Navigation durch den Datensatz verwendet werden kann.

../../../_images/home_large.png ../../../_images/back_large.png ../../../_images/forward_large.png
Die Schaltflächen Home, Forward und Back

Diese ähneln den Home-, Vorwärts- und Zurück-Steuerelementen eines Webbrowsers. Forward und Back werden verwendet, um zwischen zuvor definierten Ansichten zu navigieren. Sie haben keine Bedeutung, es sei denn, Sie sind bereits mit den Pan- und Zoom-Schaltflächen irgendwohin navigiert. Dies ist analog zum Versuch, auf Ihrem Webbrowser auf Back zu klicken, bevor Sie eine neue Seite besucht haben, oder auf Forward, bevor Sie zu einer Seite zurückgekehrt sind – es passiert nichts. Home bringt Sie zur ersten, Standardansicht Ihrer Daten.

../../../_images/move_large.png
Die Schaltfläche Pan/Zoom

Diese Schaltfläche hat zwei Modi: Pan und Zoom. Klicken Sie auf die Schaltfläche Pan/Zoom, um das Schwenken und Zoomen zu aktivieren, und bewegen Sie dann die Maus über eine Achse. Halten Sie die linke Maustaste gedrückt, um den Plot zu verschwenken, und ziehen Sie ihn an eine neue Position. Wenn Sie sie loslassen, werden die Daten unter dem Punkt, an dem Sie gedrückt haben, an den Punkt verschoben, an dem Sie losgelassen haben. Wenn Sie beim Schwenken 'x' oder 'y' drücken, wird die Bewegung auf die x- bzw. y-Achse beschränkt. Drücken Sie die rechte Maustaste, um zu zoomen, und ziehen Sie sie an eine neue Position. Die x-Achse wird proportional zur Bewegung nach rechts hineingezoomt und proportional zur Bewegung nach links herausgezoomt. Dasselbe gilt für die y-Achse und Aufwärts-/Abwärtsbewegungen (nach oben zoomt hinein, nach unten zoomt heraus). Der Punkt unter Ihrer Maus, wenn Sie mit dem Zoomen beginnen, bleibt stationär, sodass Sie um diesen Punkt herum beliebig viel hinein- oder herauszoomen können. Sie können die Modifikatortasten 'x', 'y' oder 'CONTROL' verwenden, um das Zoomen auf die x-Achse, die y-Achse oder das beibehaltene Seitenverhältnis zu beschränken.

Bei Polardiagrammen verhalten sich die Schwenk- und Zoomfunktionen unterschiedlich. Die Radiusachsenbeschriftungen können mit der linken Maustaste verschoben werden. Die Radius-Skala kann mit der rechten Maustaste hinein- und herausgezoomt werden.

../../../_images/zoom_to_rect_large.png
Die Schaltfläche Zoom-to-Rectangle

Positionieren Sie die Maus über einer Achse und drücken Sie eine Maustaste. Definieren Sie einen rechteckigen Bereich, indem Sie die Maus ziehen, während Sie die Taste an eine neue Position halten. Bei Verwendung der linken Maustaste werden die Achsenansichtslimits auf den definierten Bereich gezoomt. Bei Verwendung der rechten Maustaste werden die Achsenansichtslimits herausgezoomt, sodass die ursprünglichen Achsen in den definierten Bereich platziert werden.

../../../_images/subplots_large.png
Die Schaltfläche Subplot-Konfiguration

Verwenden Sie diese Schaltfläche, um das Erscheinungsbild des Subplots zu konfigurieren. Sie können die linke, rechte, obere oder untere Seite des Subplots oder den Abstand zwischen den Zeilen oder den Abstand zwischen den Spalten dehnen oder komprimieren.

../../../_images/filesave_large.png
Die Schaltfläche Speichern

Klicken Sie auf diese Schaltfläche, um einen Dateispeicherdialog zu öffnen. Sie können Dateien mit den folgenden Erweiterungen speichern: png, ps, eps, svg und pdf.

Andere Python-Eingabeaufforderungen#

Der interaktive Modus funktioniert in der Standard-Python-Eingabeaufforderung.

>>> import matplotlib.pyplot as plt
>>> plt.ion()
>>>

Dies stellt jedoch nicht sicher, dass der Ereignishaken ordnungsgemäß installiert ist, und Ihre Plots sind möglicherweise nicht reaktionsfähig. Bitte konsultieren Sie die Dokumentation Ihres GUI-Toolkits für Details.

Jupyter Notebooks / JupyterLab#

Um interaktive Plots im "klassischen" Notebook oder Jupyter Lab zu erhalten, verwenden Sie das ipympl-Backend (muss separat installiert werden), das das **ipywidget**-Framework verwendet. Wenn ipympl installiert ist, verwenden Sie den Magic-Befehl.

%matplotlib widget

um ihn auszuwählen und zu aktivieren.

Wenn Sie nur das klassische Notebook verwenden möchten (d.h. notebook<7), können Sie Folgendes verwenden:

%matplotlib notebook

welches das von Matplotlib bereitgestellte Backend backend_nbagg verwendet; nbagg funktioniert jedoch nicht in Jupyter Lab.

Hinweis

Um die hier beschriebene interaktive Funktionalität zu erhalten, müssen Sie ein interaktives Backend verwenden. Das Standard-Backend in Notebooks, das Inline-Backend, ist dies nicht. backend_inline rendert den Plot einmal und fügt ein statisches Bild in das Notebook ein, wenn die Zelle ausgeführt wird. Da die Bilder statisch sind, können sie nicht geschwenkt/gezoomt, Benutzereingaben empfangen oder von anderen Zellen aktualisiert werden.

GUIs + Jupyter#

Sie können auch eines der Nicht-ipympl-GUI-Backends in einem Jupyter Notebook verwenden. Wenn Sie Ihren Jupyter-Kernel lokal ausführen, wird das GUI-Fenster auf Ihrem Desktop neben Ihrem Webbrowser geöffnet. Wenn Sie Ihr Notebook auf einem Remote-Server ausführen, versucht der Kernel, das GUI-Fenster auf dem Remote-Computer zu öffnen. Es sei denn, Sie haben eine Weiterleitung des Xservers zu Ihrem Desktop arrangiert, können Sie das Fenster nicht sehen oder damit interagieren. Es kann auch eine Ausnahme auslösen.

PyCharm, Spyder und VSCode#

Viele IDEs verfügen über eine integrierte Integration mit Matplotlib. Konsultieren Sie deren Dokumentation für Konfigurationsdetails.