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 pyplot
Modul bietet Funktionen zum expliziten Erstellen von Figuren, die interaktive Werkzeuge, eine Symbolleiste, einen Tooltip und
Tastenbelegungen enthalten :
pyplot.figure
Erstellt eine neue leere
Figure
Figur oder wählt eine vorhandene Figur auspyplot.subplots
Erstellt ein neues
Figure
und füllt es mit einem Raster ausAxes
pyplot
hat einen Begriff von "The Current Figure", auf den über zugegriffen werden kann, pyplot.gcf
und einen Begriff von "The Current Axes", auf den über zugegriffen werden kann pyplot.gca
. Fast alle Funktionen in pyplot
durchlaufen das aktuelle Figure
/ Axes
(oder erstellen eines), je nach Bedarf.
Matplotlib behält einen Verweis auf alle offenen Figuren, die über pyplot.figure
oder erstellt pyplot.subplots
wurden, damit die Figuren nicht von der Garbage Collection erfasst werden. Figure
s können einzeln geschlossen und abgemeldet pyplot
werden über
pyplot.close
; alle offenen Figure
s 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 Matplotlib
und IPython
reicht es aus, zu importieren matplotlib.pyplot
und aufzurufen pyplot.ion
. Die Verwendung der %
Magie funktioniert garantiert in allen Versionen von Matplotlib und IPython.
Interaktiver Modus #
Aktivieren Sie den interaktiven Modus. |
|
Interaktiven Modus deaktivieren. |
|
Gibt zurück, ob Plots nach jedem Plotbefehl aktualisiert werden. |
Alle offenen Zahlen anzeigen. |
|
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:
neu erstellte Abbildungen und Änderungen an Abbildungen werden erst angezeigt
pyplot.show()
wird genanntpyplot.pause()
wird genanntFigureCanvasBase.flush_events()
wird genannt
pyplot.show()
führt die GUI-Ereignisschleife aus und kehrt erst zurück, wenn alle Plotfenster geschlossen sind
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.ion
die 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.pause
die GUI-Hauptschleife auf andere Weise ausführen.
Warnung
Mit Figure.show
ist 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 pyplot
verfü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 ipympl
installiert 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_nbagg
von Matplotlib bereitgestellte Backend verwendet; nbagg funktioniert jedoch nicht in Jupyter Lab.
GUIs + Jupyter #
Sie können auch eines der Nicht- ipympl
GUI-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.