Backends #
Was ist ein Backend? #
Viele Dokumentationen auf der Website und in den Mailinglisten beziehen sich auf das "Backend", und viele neue Benutzer sind durch diesen Begriff verwirrt. Matplotlib zielt auf viele verschiedene Anwendungsfälle und Ausgabeformate ab. Einige Leute verwenden Matplotlib interaktiv von der Python-Shell aus und haben Plotting-Fenster, die auftauchen, wenn sie Befehle eingeben. Einige Leute führen Jupyter -Notebooks aus und zeichnen Inline-Plots für eine schnelle Datenanalyse. Andere betten Matplotlib in grafische Benutzeroberflächen wie PyQt oder PyGObject ein, um umfangreiche Anwendungen zu erstellen. Einige Leute verwenden Matplotlib in Batch-Skripten, um Postscript-Bilder aus numerischen Simulationen zu generieren, und wieder andere betreiben Webanwendungsserver, um Diagramme dynamisch bereitzustellen.
Um alle diese Anwendungsfälle zu unterstützen, kann Matplotlib auf verschiedene Ausgaben abzielen, und jede dieser Funktionen wird als Backend bezeichnet. Das „Frontend“ ist der benutzerseitige Code, dh der Plotcode, während das „Backend“ die ganze harte Arbeit hinter den Kulissen erledigt, um die Figur zu erstellen. Es gibt zwei Arten von Backends: Benutzeroberflächen-Backends (zur Verwendung in PyQt/PySide, PyGObject, Tkinter, wxPython oder macOS/Cocoa); auch als "interaktive Backends" bezeichnet) und Hardcopy-Backends zum Erstellen von Bilddateien (PNG, SVG, PDF, PS; auch als "nicht interaktive Backends" bezeichnet).
Auswahl eines Backends #
Es gibt drei Möglichkeiten, Ihr Backend zu konfigurieren:
Der
rcParams["backend"]
Parameter in Ihrermatplotlibrc
DateiDas
MPLBACKEND
UmgebungsvariableDie Funktion
matplotlib.use()
Nachfolgend finden Sie eine genauere Beschreibung.
Wenn mehr als eine Konfiguration vorhanden ist, hat die letzte aus der Liste Vorrang; zB matplotlib.use()
überschreibt ein Anruf die Einstellung in Ihrer matplotlibrc
.
Ohne ein explizit festgelegtes Backend erkennt Matplotlib automatisch ein verwendbares Backend, basierend darauf, was auf Ihrem System verfügbar ist und ob bereits eine GUI-Ereignisschleife ausgeführt wird. Das erste verwendbare Backend in der folgenden Liste wird ausgewählt: MacOSX, QtAgg, GTK4Agg, Gtk3Agg, TkAgg, WxAgg, Agg. Das letzte, Agg, ist ein nicht interaktives Backend, das nur in Dateien schreiben kann. Es wird unter Linux verwendet, wenn Matplotlib keine Verbindung zu einem X-Display oder einem Wayland-Display herstellen kann.
Hier ist eine detaillierte Beschreibung der Konfigurationsmethoden:
Einstellung
rcParams["backend"]
in Ihrermatplotlibrc
Datei:backend : qtagg # use pyqt with antigrain (agg) rendering
Siehe auch Anpassen von Matplotlib mit Stylesheets und rcParams .
Einstellung der
MPLBACKEND
Umgebungsvariable:Sie können die Umgebungsvariable entweder für Ihre aktuelle Shell oder für ein einzelnes Skript festlegen.
Unter Unix:
> export MPLBACKEND=qtagg > python simple_plot.py > MPLBACKEND=qtagg python simple_plot.py
Unter Windows ist nur ersteres möglich:
> set MPLBACKEND=qtagg > python simple_plot.py
Das Setzen dieser Umgebungsvariable überschreibt den
backend
Parameter in jedemmatplotlibrc
, selbst wenn sich einmatplotlibrc
in Ihrem aktuellen Arbeitsverzeichnis befindet. Daher EinstellungMPLBACKEND
global, z. B. in Ihrem.bashrc
oder.profile
, wird davon abgeraten, da dies zu kontraintuitivem Verhalten führen könnte.Wenn Ihr Skript von einem bestimmten Backend abhängt, können Sie die Funktion verwenden
matplotlib.use()
:import matplotlib matplotlib.use('qtagg')
Dies sollte erfolgen, bevor eine Figur erstellt wird, da Matplotlib sonst möglicherweise das Backend nicht umschaltet und einen ImportError auslöst.
Die Verwendung
use
erfordert Änderungen in Ihrem Code, wenn Benutzer ein anderes Backend verwenden möchten. Daher sollten Sie explizite Aufrufe vermeiden,use
es sei denn, dies ist unbedingt erforderlich.
Die eingebauten Backends #
Standardmäßig sollte Matplotlib automatisch ein Standard-Backend auswählen, das sowohl interaktives Arbeiten als auch das Plotten aus Skripten mit Ausgabe auf dem Bildschirm und/oder in eine Datei ermöglicht, sodass Sie sich zumindest anfangs keine Gedanken über das Backend machen müssen. Die häufigste Ausnahme ist, wenn Ihre Python-Distribution ohne kommt tkinter
und Sie kein anderes GUI-Toolkit installiert haben. python-tk
Dies geschieht bei bestimmten Linux-Distributionen, bei denen Sie ein Linux-Paket namens (oder ähnlich) installieren müssen .
Wenn Sie jedoch grafische Benutzeroberflächen oder einen Webanwendungsserver schreiben möchten ( Einbetten in einen Webanwendungsserver (Flask) ) oder ein besseres Verständnis dafür benötigen, was vor sich geht, lesen Sie weiter. Um die Dinge für grafische Benutzeroberflächen leichter anpassbar zu machen, trennt Matplotlib das Konzept des Renderers (das Ding, das tatsächlich die Zeichnung ausführt) von der Leinwand (dem Ort, an dem die Zeichnung hingeht). Der kanonische Renderer für Benutzeroberflächen Agg
verwendet die C++-Bibliothek Anti-Grain Geometry , um ein Rasterbild (Pixelbild) der Figur zu erstellen. Es wird von den Backends QtAgg
, GTK4Agg
, GTK3Agg
, wxAgg
, TkAgg
und
verwendet. macosx
Ein alternativer Renderer basiert auf der Cairo-Bibliothek, die von verwendet wird QtCairo
, etc.
Auch bei den Rendering-Engines können Anwender zwischen Vektor- oder Raster - Renderern unterscheiden. Vektorgrafiksprachen geben Zeichenbefehle wie „eine Linie von diesem Punkt zu diesem Punkt zeichnen“ aus und sind daher skalierungsfrei. Raster-Backends generieren eine Pixeldarstellung der Linie, deren Genauigkeit von einer DPI-Einstellung abhängt.
Hier ist eine Zusammenfassung der Matplotlib -Renderer (es gibt für jeden ein gleichnamiges Backend; dies sind nicht interaktive Backends , die in eine Datei schreiben können):
Renderer |
Datentypen |
Beschreibung |
---|---|---|
AGG |
png |
Rastergrafiken – hochwertige Bilder mit der Anti-Korn-Geometrie- Engine. |
Vektorgrafiken -- Ausgabe im Portable Document Format . |
||
PS |
ps, eps |
Vektorgrafiken – PostScript - Ausgabe. |
SVG |
SVG |
|
PGF |
pgf, pdf |
Vektorgrafiken -- mit dem pgf -Paket. |
Kairo |
png, ps, pdf, svg |
Raster- oder Vektorgrafiken – mit der Cairo - Bibliothek (erfordert pycairo oder cairocffi ). |
Um Diagramme mit den nicht interaktiven Backends zu speichern, verwenden Sie die
matplotlib.pyplot.savefig('filename')
Methode.
Dies sind die unterstützten Benutzeroberflächen und Renderer-Kombinationen; Dies sind interaktive Backends , die auf dem Bildschirm angezeigt werden können und geeignete Renderer aus der obigen Tabelle verwenden, um in eine Datei zu schreiben:
Backend |
Beschreibung |
---|---|
QtAgg |
Agg-Rendering in einem Qt- Canvas (erfordert PyQt oder Qt for Python , auch bekannt als PySide). Dieses Backend kann in IPython mit aktiviert werden
. |
ipympl |
Agg-Rendering eingebettet in ein Jupyter-Widget (erfordert ipympl ). Dieses Back-End kann in einem Jupyter-Notebook mit aktiviert werden
. |
GTK3Agg |
Agg-Rendering auf einer GTK 3.x-Leinwand (erfordert PyGObject und
pycairo ). Dieses Backend kann in IPython mit aktiviert werden
. |
GTK4Agg |
Agg-Rendering auf einem GTK 4.x-Canvas (erfordert PyGObject und
pycairo ). Dieses Backend kann in IPython mit aktiviert werden
. |
Mac OS X |
Agg-Rendering in eine Cocoa-Leinwand in OSX. Dieses Backend kann in IPython mit aktiviert werden . |
TkAgg |
Agg-Rendering in eine Tk - Leinwand (erfordert TkInter ). Dieses Backend kann in IPython mit aktiviert werden . |
nbAgg |
Betten Sie eine interaktive Figur in ein klassisches Jupyter-Notebook ein. Dieses Back-End kann in Jupyter-Notebooks über aktiviert werden
. |
WebAgg |
On |
GTK3Cairo |
Cairo-Rendering auf einer GTK 3.x-Leinwand (erfordert PyGObject und pycairo ). |
GTK4Cairo |
Cairo-Rendering auf einem GTK 4.x-Canvas (erfordert PyGObject und pycairo ). |
wxAgg |
Agg-Rendering auf einer wxWidgets- Leinwand (erfordert wxPython 4). Dieses Backend kann in IPython mit aktiviert werden . |
Notiz
Bei den Namen der eingebauten Backends wird die Groß-/Kleinschreibung nicht beachtet; zB sind 'QtAgg' und 'qtagg' äquivalent.
ipympl #
Das Jupyter-Widget-Ökosystem entwickelt sich zu schnell, um es direkt in Matplotlib zu unterstützen. So installieren Sie ipympl:
pip install ipympl
oder
conda install ipympl -c conda-forge
Siehe Installieren von ipympl für weitere Details.
Wie wähle ich die Qt-Implementierung aus? #
Die QtAgg- und QtCairo-Backends unterstützen sowohl Qt 5 und 6 als auch beide Python-Bindungen ( PyQt oder Qt for Python , auch bekannt als PySide). Wenn bereits eine Bindung geladen wurde, wird sie für das Qt-Backend verwendet. Andernfalls wird die erste verfügbare Bindung in der folgenden Reihenfolge verwendet: PyQt6, PySide6, PyQt5, PySide2.
DasQT_API
Die Umgebungsvariable kann so eingestellt werden, dass sie die Suche außer Kraft setzt, wenn noch nichts geladen wurde. Es kann (ohne Berücksichtigung der Groß-/Kleinschreibung) auf PyQt6, PySide6, PyQt5 oder PySide2 gesetzt werden, um die zu verwendende Version und Bindung auszuwählen. Wenn die ausgewählte Implementierung nicht verfügbar ist, kann das Qt-Backend nicht geladen werden, ohne andere Qt-Implementierungen zu versuchen. Weitere Einzelheiten finden Sie unter Qt-Bindungen .
Verwenden von nicht integrierten Backends #
Allgemeiner kann jedes importierbare Backend mit einer der oben genannten Methoden ausgewählt werden. Wenn name.of.the.backend
es sich um das Modul handelt, das das Backend enthält, verwenden Sie module://name.of.the.backend
als Backend-Namen, z
. B. matplotlib.use('module://name.of.the.backend')
.