Interaktive Figuren #

Bei der Arbeit mit Daten kann Interaktivität von unschätzbarem Wert sein. Die in den Matplotlib-GUI-Fenstern integrierten Tools zum Schwenken/Zoomen und zur Mauspositionierung sind oft ausreichend, aber Sie können auch das Ereignissystem verwenden, um benutzerdefinierte Tools zur Datenexploration zu erstellen.

Matplotlib wird mit Backends geliefert, die an mehrere GUI-Toolkits (Qt, Tk, Wx, GTK, macOS, JavaScript) binden, und Pakete von Drittanbietern bieten Bindungen an kivy und Jupyter Lab . Damit die Figuren 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 pyplotModul bietet Funktionen zum expliziten Erstellen von Figuren, die interaktive Werkzeuge, eine Symbolleiste, einen Tooltip und Tastenbelegungen enthalten :

pyplot.figure

Erstellt eine neue leere FigureFigur oder wählt eine vorhandene Figur aus

pyplot.subplots

Erstellt ein neues Figureund füllt es mit einem Raster ausAxes

pyplothat einen Begriff von "The Current Figure", auf den über zugegriffen werden kann, pyplot.gcfund einen Begriff von "The Current Axes", auf den über zugegriffen werden kann pyplot.gca. Fast alle Funktionen in pyplotdurchlaufen das aktuelle Figure/ Axes(oder erstellen eines), je nach Bedarf.

Matplotlib behält einen Verweis auf alle offenen Figuren, die über pyplot.figureoder erstellt pyplot.subplotswurden, damit die Figuren nicht von der Garbage Collection erfasst werden. Figures können einzeln geschlossen und abgemeldet pyplotwerden über pyplot.close; alle offenen Figures können über geschlossen werden plt.close('all').

Weitere Informationen zum Ereignissystem und den integrierten Ereignisschleifen von Matplotlib finden Sie unter:

IPython-Integration #

Wir empfehlen die Verwendung von IPython für eine interaktive Shell. Zusätzlich zu all seinen Funktionen (verbesserte Tabulatorvervollständigung, Magie, mehrzeilige Bearbeitung usw.) stellt es auch sicher, dass die GUI-Toolkit-Ereignisschleife ordnungsgemäß in die Befehlszeile integriert ist (siehe Eingabeaufforderungsintegration ).

In diesem Beispiel erstellen und ändern wir eine Figur über eine IPython-Eingabeaufforderung. Die Abbildung wird in einem QtAgg-GUI-Fenster angezeigt. Verwenden Sie die Magie , um die Integration zu konfigurieren und den interaktiven Modus zu aktivieren:%matplotlib

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

In [2]: import matplotlib.pyplot as plt

Erstellen Sie ein neues Figurenfenster:

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 nach orange:

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

Wenn Sie das automatische Neuzeichnen des Diagramms deaktivieren möchten:

In [6]: plt.ioff()

Wenn Sie das automatische Neuzeichnen des Diagramms wieder aktivieren möchten:

In [7]: plt.ion()

In neueren Versionen von Matplotlibund IPythonreicht es aus, zu importieren matplotlib.pyplotund aufzurufen pyplot.ion. Die Verwendung der %Magie funktioniert garantiert in allen Versionen von Matplotlib und IPython.

Interaktiver Modus #

pyplot.ion

Aktivieren Sie den interaktiven Modus.

pyplot.ioff

Interaktiven Modus deaktivieren.

pyplot.isinteractive

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

pyplot.show

Alle offenen Zahlen anzeigen.

pyplot.pause

Führen Sie die GUI-Ereignisschleife für Intervallsekunden aus.

Steuerelemente im interaktiven Modus:

  • ob erstellte Figuren automatisch angezeigt werden

  • ob Änderungen an Künstlern automatisch das Neuzeichnen bestehender Figuren auslösen

  • Wenn pyplot.show()zurückgegeben wird, wenn keine Argumente angegeben werden: sofort oder nachdem alle Figuren geschlossen wurden

Im interaktiven Modus:

  • neu erstellte Figuren werden sofort angezeigt

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

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

Wenn nicht im interaktiven Modus:

Wenn Sie sich im nicht interaktiven Modus befinden (oder Figuren im nicht interaktiven Modus erstellt haben), müssen Sie möglicherweise explizit aufrufen pyplot.show , um die Fenster auf Ihrem Bildschirm anzuzeigen. Wenn Sie die GUI-Ereignisschleife nur für eine bestimmte Zeit ausführen möchten, können Sie pyplot.pause. Dies blockiert den Fortschritt Ihres Codes, als ob Sie aufgerufen hätten time.sleep, 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 GUI-Ereignisschleife, die in Ihre Eingabeaufforderung integriert ist, und die Zahlen im interaktiven Modus sind voneinander unabhängig. Wenn Sie pyplot.iondie Ereignisschleifen-Integration verwenden, aber nicht eingerichtet haben, werden Ihre Zahlen angezeigt, sind aber nicht interaktiv, während die Eingabeaufforderung auf Eingaben wartet. Sie können nicht schwenken/zoomen und die Figur wird möglicherweise nicht einmal gerendert (das Fenster erscheint möglicherweise schwarz, transparent oder als Schnappschuss des darunter liegenden Desktops). Wenn Sie umgekehrt die Ereignisschleifenintegration konfigurieren, reagieren die angezeigten Zahlen, während sie auf Eingaben an der Eingabeaufforderung warten, unabhängig vom "interaktiven Modus" von pyplot.

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

Warnung

Mit Figure.showist es möglich, eine Figur auf dem Bildschirm anzuzeigen, ohne die Ereignisschleife zu starten und ohne sich im interaktiven Modus zu befinden. Dies kann funktionieren (abhängig vom GUI-Toolkit), führt jedoch wahrscheinlich zu einer nicht reagierenden Abbildung.

Standard-Benutzeroberfläche #

Die von erstellten Fenster pyplotverfügen über eine interaktive Symbolleiste mit Navigationsschaltflächen und einer Anzeige der Datenwerte, auf die der Cursor zeigt. Eine Reihe hilfreicher Tastenkombinationen sind standardmäßig registriert.

Andere Python-Eingabeaufforderungen #

Der interaktive Modus funktioniert in der standardmäßigen Python-Eingabeaufforderung:

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

Dies stellt jedoch nicht sicher, dass der Ereignis-Hook ordnungsgemäß installiert ist, und Ihre Zahlen reagieren möglicherweise nicht. Einzelheiten entnehmen Sie bitte der Dokumentation Ihres GUI-Toolkits.

Jupyter-Notebooks / JupyterLab #

Notiz

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

Um interaktive Figuren im „klassischen“ Notebook oder Jupyter-Lab zu erhalten, verwenden Sie das ipympl- Backend (muss separat installiert werden), das das ipywidget- Framework verwendet. Wenn ipymplinstalliert ist, verwenden Sie die Magie:

%matplotlib widget

auswählen und aktivieren.

Wenn Sie nur das klassische Notizbuch verwenden müssen, können Sie verwenden

%matplotlib notebook

die das backend_nbaggvon Matplotlib bereitgestellte Backend verwendet; nbagg funktioniert jedoch nicht in Jupyter Lab.

GUIs + Jupyter #

Sie können auch eines der Nicht- ipymplGUI-Back-Ends in einem Jupyter Notebook verwenden. Wenn Sie Ihren Jupyter-Kernel lokal ausführen, erscheint das GUI-Fenster auf Ihrem Desktop neben Ihrem Webbrowser. Wenn Sie Ihr Notebook auf einem Remote-Server ausführen, versucht der Kernel, das GUI-Fenster auf dem Remote-Computer zu öffnen. Sie können das Fenster nicht sehen oder mit ihm interagieren, es sei denn, Sie haben dafür gesorgt, dass der xserver zurück zu Ihrem Desktop weitergeleitet wird. Es kann auch eine Ausnahme auslösen.

PyCharm, Spyder und VSCode #

Viele IDEs haben eine integrierte Integration mit Matplotlib, bitte konsultieren Sie ihre Dokumentation für Konfigurationsdetails.