Einführung in Achsen (oder Subplots)#

Matplotlib Axes sind das Tor zur Erstellung Ihrer Datenvisualisierungen. Sobald eine Achse in einer Abbildung platziert ist, stehen viele Methoden zur Verfügung, um Daten zu der Achse hinzuzufügen. Eine Achse hat typischerweise ein Paar von Axis-Künstlern (Artists), die das Koordinatensystem der Daten definieren, und enthält Methoden zum Hinzufügen von Anmerkungen wie x- und y-Achsenbeschriftungen, Titeln und Legenden.

../../../_images/anatomy.png

Anatomie einer Abbildung#

Im obigen Bild wurde das Achsenobjekt mit ax = fig.subplots() erstellt. Alles andere in der Abbildung wurde mit Methoden dieses ax-Objekts erstellt oder kann von dort aus zugegriffen werden. Wenn wir die Beschriftung der x-Achse ändern möchten, rufen wir ax.set_xlabel('Neue Beschriftung') auf, wenn wir Daten plotten möchten, rufen wir ax.plot(x, y) auf. Tatsächlich ist im obigen Bild der einzige Künstler (Artist), der nicht Teil der Achse ist, die Abbildung selbst, sodass die Klasse axes.Axes wirklich das Tor zu einem Großteil der Funktionalität von Matplotlib darstellt.

Beachten Sie, dass Achsen für den Betrieb von Matplotlib so grundlegend sind, dass viele der hier behandelten Materialien doppelt zu denen im Schnellstart-Leitfaden vorkommen.

Erstellen von Achsen#

import matplotlib.pyplot as plt
import numpy as np

fig, axs = plt.subplots(ncols=2, nrows=2, figsize=(3.5, 2.5),
                        layout="constrained")
# for each Axes, add an artist, in this case a nice label in the middle...
for row in range(2):
    for col in range(2):
        axs[row, col].annotate(f'axs[{row}, {col}]', (0.5, 0.5),
                            transform=axs[row, col].transAxes,
                            ha='center', va='center', fontsize=18,
                            color='darkgrey')
fig.suptitle('plt.subplots()')

(Quellcode, 2x.png, png)

Achsen werden über Methoden von Figure-Objekten oder über die pyplot-Schnittstelle hinzugefügt. Diese Methoden werden ausführlicher in Erstellen von Abbildungen und Anordnen mehrerer Achsen in einer Abbildung besprochen. Zum Beispiel positioniert add_axes eine Achse manuell auf der Seite. Im obigen Beispiel platziert subplots ein Gitter von Subplots in der Abbildung, und axs ist ein (2, 2) Array von Achsen, zu denen jeweils Daten hinzugefügt werden können.

Es gibt eine Reihe weiterer Methoden zum Hinzufügen von Achsen zu einer Abbildung

  • Figure.add_axes: Positioniert eine Achse manuell. fig.add_axes([0, 0, 1, 1]) erstellt eine Achse, die die gesamte Abbildung ausfüllt.

  • pyplot.subplots und Figure.subplots: Fügt ein Gitter von Achsen wie im obigen Beispiel hinzu. Die Pyplot-Version gibt sowohl das Figure-Objekt als auch ein Array von Achsen zurück. Beachten Sie, dass fig, ax = plt.subplots() eine einzelne Achse zu einer Abbildung hinzufügt.

  • pyplot.subplot_mosaic und Figure.subplot_mosaic: Fügt ein Gitter von benannten Achsen hinzu und gibt ein Wörterbuch von Achsen zurück. Für fig, axs = plt.subplot_mosaic([['left', 'right'], ['bottom', 'bottom']]) ist axs['left'] eine Achse in der oberen Reihe links, und axs['bottom'] ist eine Achse, die sich über beide Spalten unten erstreckt.

Siehe Anordnen mehrerer Achsen in einer Abbildung für weitere Details, wie Gitter von Achsen auf einer Abbildung angeordnet werden.

Achsen-Plotmethoden#

Die meisten High-Level-Plotmethoden werden über die Klasse axes.Axes aufgerufen. Sehen Sie die API-Dokumentation für eine vollständige kuratierte Liste und Plottypen für Beispiele. Ein grundlegendes Beispiel ist axes.Axes.plot

fig, ax = plt.subplots(figsize=(4, 3))
np.random.seed(19680801)
t = np.arange(100)
x = np.cumsum(np.random.randn(100))
lines = ax.plot(t, x)

(Quellcode, 2x.png, png)

Beachten Sie, dass plot eine Liste von *Linien*-Künstlern (Artists) zurückgibt, die anschließend manipuliert werden können, wie in Einführung in Künstler (Artists) erläutert.

Eine sehr unvollständige Liste von Plotmethoden ist unten aufgeführt. Wiederum, siehe Plottypen für weitere Beispiele und axes.Axes für die vollständige Liste der Methoden.

Achsenbeschriftung und Anmerkung#

Normalerweise möchten wir die Achsen mit einer x-Achsenbeschriftung, einer y-Achsenbeschriftung und einem Titel beschriften, und oft möchten wir eine Legende haben, um Plot-Elemente zu unterscheiden. Die Klasse Axes hat eine Reihe von Methoden, um diese Anmerkungen zu erstellen.

fig, ax = plt.subplots(figsize=(5, 3), layout='constrained')
np.random.seed(19680801)
t = np.arange(200)
x = np.cumsum(np.random.randn(200))
y = np.cumsum(np.random.randn(200))
linesx = ax.plot(t, x, label='Random walk x')
linesy = ax.plot(t, y, label='Random walk y')

ax.set_xlabel('Time [s]')
ax.set_ylabel('Distance [km]')
ax.set_title('Random walk example')
ax.legend()

(Quellcode, 2x.png, png)

Diese Methoden sind relativ einfach, obwohl es eine Reihe von Texteigenschaften und -layout gibt, die auf den Textobjekten gesetzt werden können, wie z. B. *fontsize*, *fontname*, *horizontalalignment*. Legenden können viel komplizierter sein; siehe Leitfaden für Legenden für weitere Details.

Beachten Sie, dass Text auch mit text und annotate zu Achsen hinzugefügt werden kann. Dies kann sehr ausgefeilt sein: siehe Texteigenschaften und -layout und Anmerkungen für weitere Informationen.

Achsenbegrenzungen, Skalen und Ticks#

Jede Achse hat zwei (oder mehr) Axis-Objekte, auf die über die Eigenschaften xaxis und yaxis zugegriffen werden kann. Diese haben eine erhebliche Anzahl von Methoden, und für stark anpassbare Achsen ist es nützlich, die API bei Axis zu lesen. Die Achsenklasse bietet jedoch eine Reihe von Helfern für die häufigsten dieser Methoden. Tatsächlich ist die oben diskutierte Methode set_xlabel ein Helfer für set_label_text.

Andere wichtige Methoden setzen die Grenzen der Achsen (set_xlim, set_ylim) oder grundlegender die Skala der Achsen. So können wir zum Beispiel eine Achse mit einer logarithmischen Skala versehen und in einen Teilbereich der Daten hineinzoomen

fig, ax = plt.subplots(figsize=(4, 2.5), layout='constrained')
np.random.seed(19680801)
t = np.arange(200)
x = 2**np.cumsum(np.random.randn(200))
linesx = ax.plot(t, x)
ax.set_yscale('log')
ax.set_xlim([20, 180])

(Quellcode, 2x.png, png)

Die Achsenklasse bietet auch Helfer für den Umgang mit Achsen-Ticks und deren Beschriftungen. Am einfachsten sind set_xticks und set_yticks, die manuell die Tick-Positionen und optional ihre Beschriftungen setzen. Kleine Ticks können mit minorticks_on oder minorticks_off ein- oder ausgeschaltet werden.

Viele Aspekte von Achsen-Ticks und Tickbeschriftungen können mit tick_params angepasst werden. Um zum Beispiel die Oberseite der Achse anstelle der Unterseite zu beschriften, die Ticks rot zu färben und die Tickbeschriftungen grün zu färben

fig, ax = plt.subplots(figsize=(4, 2.5))
ax.plot(np.arange(10))
ax.tick_params(top=True, labeltop=True, color='red', axis='x',
               labelcolor='green')

(Quellcode, 2x.png, png)

Feinere Kontrolle über Ticks, das Setzen von Skalen und die Steuerung der Achse kann über diese Achsen-Level-Helfer hinaus stark angepasst werden.

Achsenlayout#

Manchmal ist es wichtig, das Seitenverhältnis eines Plots im Datenraum festzulegen, was wir mit set_aspect tun können

fig, axs = plt.subplots(ncols=2, figsize=(7, 2.5), layout='constrained')
np.random.seed(19680801)
t = np.arange(200)
x = np.cumsum(np.random.randn(200))
axs[0].plot(t, x)
axs[0].set_title('aspect="auto"')

axs[1].plot(t, x)
axs[1].set_aspect(3)
axs[1].set_title('aspect=3')

(Quellcode, 2x.png, png)