Einführung in Abbildungen#
fig = plt.figure(figsize=(2, 2), facecolor='lightskyblue',
layout='constrained')
fig.suptitle('Figure')
ax = fig.add_subplot()
ax.set_title('Axes', loc='left', fontstyle='oblique', fontsize='medium')
Wenn man sich Matplotlib-Visualisierungen ansieht, schaut man fast immer auf Künstler (Artists), die auf einer Abbildung platziert sind. Im obigen Beispiel ist die Abbildung der blaue Bereich und add_subplot hat einen Achsen-Künstler zur Abbildung hinzugefügt (siehe Teile einer Abbildung). Eine kompliziertere Visualisierung kann mehrere Achsen zur Abbildung hinzufügen, Farblegenden, Beschriftungen und die Achsen selbst können mehrere Künstler hinzugefügt bekommen (z. B. ax.plot oder ax.imshow).
Abbildungen anzeigen#
Wir werden im Folgenden detaillierter darauf eingehen, wie Abbildungen erstellt werden, aber zunächst ist es hilfreich zu verstehen, wie eine Abbildung angezeigt wird. Dies variiert je nachdem, wie Sie Matplotlib verwenden und welchen Backend Sie verwenden.
Notebooks und IDEs#
Screenshot eines Jupyter Notebooks mit einer Abbildung, die über das Standard-Backend inline generiert wurde.#
Wenn Sie ein Notebook (z. B. Jupyter) oder eine IDE, die Notebooks rendert (PyCharm, VSCode usw.), verwenden, verfügen diese über ein Backend, das die Matplotlib-Abbildung beim Ausführen einer Codezelle rendert. Das Standard-Jupyter-Backend (%matplotlib inline) erstellt statische Plots, die standardmäßig die Abbildungsgröße zuschneiden oder erweitern, um eine enge Box um die zur Abbildung hinzugefügten Künstler zu haben (siehe Abbildungen speichern unten). Für interaktive Plots in Jupyter benötigen Sie einen IPython-"Magic"-Befehl wie %matplotlib widget für das ipympl-Backend in jupyter lab oder notebook>=7, oder %matplotlib notebook für das Matplotlib- Notebook in notebook<7 oder nbclassic.
Hinweis
Das ipympl-Backend ist ein separates Paket, siehe ipympl installieren.
Screenshot eines Jupyter Notebooks mit einer interaktiven Abbildung, die über den Befehl %matplotlib notebook generiert wurde. Benutzer sollten auch das ähnliche widget-Backend ausprobieren, wenn sie JupyterLab verwenden.#
Siehe auch
Eigenständige Skripte und interaktive Nutzung#
Wenn der Benutzer an einem Client mit einem Fenstersystem arbeitet, gibt es eine Reihe von Backends, die verwendet werden können, um die Abbildung auf dem Bildschirm darzustellen, normalerweise unter Verwendung eines Python-Qt-, Tk- oder Wx-Toolkits oder des nativen MacOS-Backends. Diese werden typischerweise entweder in der matplotlibrc-Datei des Benutzers ausgewählt oder durch Aufruf von z. B. matplotlib.use('QtAgg') zu Beginn einer Sitzung oder eines Skripts.
Screenshot einer Abbildung, die über ein Python-Skript generiert und mit dem QtAgg-Backend angezeigt wurde.#
Wenn von einem Skript oder interaktiv (z. B. von einer IPython-Shell) ausgeführt, wird die Abbildung erst angezeigt, wenn wir plt.show() aufrufen. Die Abbildung erscheint in einem neuen GUI-Fenster und hat normalerweise eine Werkzeugleiste mit Werkzeugen zum Zoomen, Verschieben und anderen Interaktionsmöglichkeiten mit der Abbildung. Standardmäßig blockiert plt.show() weitere Interaktionen aus dem Skript oder der Shell, bis das Abbildungsfenster geschlossen wird, obwohl dies für bestimmte Zwecke deaktiviert werden kann. Weitere Details finden Sie unter Interaktiver Modus.
Beachten Sie, dass die Abbildung auf einem Client, der keinen Zugriff auf ein Fenstersystem hat, auf das Rendern mit dem "Agg"-Backend zurückfällt und nicht angezeigt werden kann, obwohl sie gespeichert werden kann.
Siehe auch
Abbildungen erstellen#
Der mit Abstand häufigste Weg, eine Abbildung zu erstellen, ist die Verwendung der pyplot-Schnittstelle. Wie in Matplotlib Application Interfaces (APIs) erwähnt, dient die pyplot-Schnittstelle zwei Zwecken. Einer ist das Starten des Backends und die Verwaltung von GUI-Fenstern. Der andere ist ein globaler Zustand für Achsen und Künstler, der eine Kurzform-API für Zeichenmethoden ermöglicht. Im obigen Beispiel verwenden wir pyplot für den ersten Zweck und erstellen das Abbildungsobjekt fig. Als Nebeneffekt wird fig auch zum globalen Zustand von pyplot hinzugefügt und kann über gcf abgerufen werden.
Benutzer wünschen sich normalerweise eine Achse oder ein Raster von Achsen, wenn sie eine Abbildung erstellen. Daher gibt es neben figure praktische Methoden, die sowohl eine Abbildung als auch einige Achsen zurückgeben. Ein einfaches Raster von Achsen kann mit pyplot.subplots erreicht werden (was einfach Figure.subplots umschließt).
fig, axs = plt.subplots(2, 2, figsize=(4, 3), layout='constrained')
Komplexere Raster können mit pyplot.subplot_mosaic erreicht werden (was Figure.subplot_mosaic umschließt).
fig, axs = plt.subplot_mosaic([['A', 'right'], ['B', 'right']],
figsize=(4, 3), layout='constrained')
for ax_name, ax in axs.items():
ax.text(0.5, 0.5, ax_name, ha='center', va='center')
Manchmal möchten wir ein verschachteltes Layout in einer Abbildung haben, mit zwei oder mehr Sätzen von Achsen, die nicht dasselbe Achsenraster teilen. Wir können add_subfigure oder subfigures verwenden, um virtuelle Abbildungen innerhalb einer Elternabbildung zu erstellen. Weitere Details finden Sie unter Abbildung-Subfiguren.
fig = plt.figure(layout='constrained', facecolor='lightskyblue')
fig.suptitle('Figure')
figL, figR = fig.subfigures(1, 2)
figL.set_facecolor('thistle')
axL = figL.subplots(2, 1, sharex=True)
axL[1].set_xlabel('x [m]')
figL.suptitle('Left subfigure')
figR.set_facecolor('paleturquoise')
axR = figR.subplots(1, 2, sharey=True)
axR[0].set_title('Axes 1')
figR.suptitle('Right subfigure')
Es ist möglich, direkt eine Abbildung-Instanz zu instanziieren, ohne die pyplot-Schnittstelle zu verwenden. Dies ist normalerweise nur notwendig, wenn Sie Ihre eigene GUI-Anwendung oder einen Dienst erstellen möchten, der nicht den globalen pyplot-Zustand mit sich führen soll. Beispiele hierfür finden Sie in den Einbettungsbeispielen unter Matplotlib in grafische Benutzeroberflächen einbetten.
Abbildungsoptionen#
Beim Erstellen von Abbildungen stehen einige Optionen zur Verfügung. Die Größe der Abbildung auf dem Bildschirm wird durch figsize und dpi festgelegt. figsize ist die (Breite, Höhe) der Abbildung in Zoll (oder, falls bevorzugt, in Einheiten von 72 typografischen Punkten). dpi gibt an, wie viele Pixel pro Zoll die Abbildung gerendert wird. Damit Ihre Abbildungen in der physischen Größe auf dem Bildschirm erscheinen, die Sie angefordert haben, sollten Sie dpi auf denselben dpi wie Ihr Grafiksystem setzen. Beachten Sie, dass viele Grafiksysteme jetzt ein "DPI-Verhältnis" verwenden, um anzugeben, wie viele Bildschirm-Pixel zur Darstellung eines Grafik-Pixels verwendet werden. Matplotlib wendet das DPI-Verhältnis auf die an die Abbildung übergebenen dpi an, um eine höhere Auflösung zu erzielen. Daher sollten Sie die niedrigere Zahl an die Abbildung übergeben.
Die Optionen facecolor, edgecolor, linewidth und frameon ändern das Aussehen der Abbildung auf die erwartete Weise, wobei frameon die Abbildung transparent macht, wenn es auf False gesetzt ist.
Schließlich kann der Benutzer eine Layout-Engine für die Abbildung mit dem Parameter layout angeben. Matplotlib bietet derzeit die Layout-Engines "constrained", "compressed" und "tight" an. Diese skalieren die Achsen innerhalb der Abbildung, um Überschneidungen von Achsenbeschriftungen zu vermeiden, versuchen, Achsen auszurichten, und können in vielen gängigen Fällen manuelle Anpassungen von Künstlern in einer Abbildung erheblich reduzieren.
Künstler hinzufügen#
Die Klasse Abbildung verfügt über eine Reihe von Methoden zum Hinzufügen von Künstlern zu einer Abbildung oder einer SubFigure. Die bei weitem gebräuchlichsten sind das Hinzufügen von Achsen verschiedener Konfigurationen (add_axes, add_subplot, subplots, subplot_mosaic) und Subfiguren (subfigures). Farblegenden werden zu Achsen oder Achsengruppen auf Abbildungsebene hinzugefügt (colorbar). Es ist auch möglich, eine Abbildungslegende (legend) zu haben. Andere Künstler umfassen abbildungsweite Beschriftungen (suptitle, supxlabel, supylabel) und Text (text). Schließlich können Low-Level-Künstler direkt mit add_artist hinzugefügt werden, wobei normalerweise darauf geachtet wird, die entsprechende Transformation zu verwenden. Üblicherweise gehören dazu Figure.transFigure, das von 0 bis 1 in jeder Richtung reicht und den Bruchteil der aktuellen Abbildungsgröße darstellt, oder Figure.dpi_scale_trans, das in physikalischen Einheiten von Zoll von der unteren linken Ecke der Abbildung ist (siehe Transformationen Tutorial für weitere Details).
Abbildungen speichern#
Schließlich können Abbildungen mit der Methode savefig auf der Festplatte gespeichert werden. fig.savefig('MeineAbbildung.png', dpi=200) speichert eine Abbildung im PNG-Format in der Datei MeineAbbildung.png im aktuellen Verzeichnis auf der Festplatte mit einer Auflösung von 200 Dots-per-Inch. Beachten Sie, dass der Dateiname einen relativen oder absoluten Pfad zu einem beliebigen Ort im Dateisystem enthalten kann.
Viele Ausgabetypen werden unterstützt, darunter Rasterformate wie PNG, GIF, JPEG, TIFF und Vektorformate wie PDF, EPS und SVG.
Standardmäßig wird die Größe der gespeicherten Abbildung durch die Abbildungsgröße (in Zoll) und, für Rasterformate, durch die dpi bestimmt. Wenn dpi nicht gesetzt ist, wird die dpi der Abbildung verwendet. Beachten Sie, dass dpi bei Vektorformaten wie PDF weiterhin Bedeutung hat, wenn die Abbildung Künstler enthält, die rasterisiert wurden. Die angegebenen dpi sind die Auflösung der rasterisierten Objekte.
Es ist möglich, die Größe der Abbildung mit dem Argument bbox_inches für savefig zu ändern. Dies kann manuell angegeben werden, wiederum in Zoll. Der bei weitem häufigste Anwendungsfall ist jedoch bbox_inches='tight'. Diese Option "schrumpft", passt die Größe der Abbildung nach Bedarf an, sodass sie eng um alle Künstler in einer Abbildung liegt, mit einem kleinen Abstand, der durch pad_inches angegeben werden kann und standardmäßig 0,1 Zoll beträgt. Die gestrichelte Box in der folgenden Abbildung zeigt den Teil der Abbildung, der gespeichert würde, wenn bbox_inches='tight' in savefig verwendet würde.