Matplotlib subplots()-Funktion
Matplotlib-Referenzdokumentation
subplots()Es ist der empfohlene Weg, eine Figure und eine Reihe von Axes-Subplots zu erstellen, wodurch das Erstellen der Zeichenfläche und der Subplots mit einem einzigen Aufruf abgeschlossen wird.
Es ist die zentrale Einstiegsfunktion der objektorientierten Schnittstelle von Matplotlib.
Funktionsdefinition
pyplot-Schnittstelle
matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False,
sharey=False, squeeze=True, width_ratios=None,
height_ratios=None, subplot_kw=None, gridspec_kw=None,
**fig_kw)
Figure-Methode
Figure.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False,
squeeze=True, width_ratios=None, height_ratios=None,
subplot_kw=None, gridspec_kw=None)
Parameterbeschreibung
| Parameter | Type | Beschreibung |
|---|---|---|
| nrows | int | Anzahl der Subplot-Zeilen, Standard: 1 |
| ncols | int | Anzahl der Subplot-Spalten, Standard: 1 |
| sharex / sharey | bool oder str | Ob die x/y-Achsen gemeinsam genutzt werden. Es können 'all'/'row'/'col'/'none' oder boolesche Werte übergeben werden |
| squeeze | bool | Wenn True, werden automatisch zusätzliche Dimensionen für einzelne Zeile/Spalte entfernt, Standard: True |
| width_ratios | Liste | Breitenverhältnis jeder Spalte, z. B. [1, 2] bedeutet, Spalte 2 ist zweimal so breit wie Spalte 1 |
| height_ratios | Liste | Höhenverhältnis jeder Zeile, z. B. [2, 1] bedeutet, Zeile 1 ist zweimal so hoch wie Zeile 2 |
| subplot_kw | dict | Parameter, die an die Subplot-Erstellung übergeben werden, z. B. dict(projection='polar'), um ein Polar-Subplot zu erstellen |
| gridspec_kw | dict | Parameter, die an GridSpec übergeben werden, z. B. dict(hspace=0.3, wspace=0.3), um den Subplot-Abstand festzulegen |
| **fig_kw | dict | Parameter, die an die Figure-Erstellung übergeben werden, z. B. figsize=(8,6), dpi=100, layout='constrained' |
Der Rückgabewert von subplots() ist ein Tupel
(fig, ax)Wenn es nur eine Zeile und eine Spalte gibt, ist ax ein einzelnes Axes-Objekt; bei mehreren Zeilen und Spalten ist ax ein 2D-Array von Axes.
Anwendungsbeispiele
Beispiel 1: Einzelnes Subplot
Beispiel
import numpy as np
# Ein einzelnes Subplot erstellen (häufigste Verwendung)
fig, ax = plt.subplots(figsize=(6, 4), layout='constrained')
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x))
ax.set_title('Einzelnes Subplot')
ax.set_xlabel('x')
ax.set_ylabel('sin(x)')
ax.grid(True, alpha=0.3)
plt.show()
Beispiel 2: Eine Zeile, mehrere Spalten / Eine Spalte, mehrere Zeilen
Beispiel
import numpy as np
x = np.linspace(0, 10, 100)
# Eine Zeile, drei Spalten
fig, axes = plt.subplots(1, 3, figsize=(12, 4),
layout='constrained')
# axes ist ein 1D-Array
axes[0].plot(x, np.sin(x), color='blue')
axes[0].set_title('sin(x)')
axes[1].plot(x, np.cos(x), color='red')
axes[1].set_title('cos(x)')
axes[2].plot(x, np.tan(x), color='green')
axes[2].set_title('tan(x)')
axes[2].set_ylim(-5, 5) # y-Bereich begrenzen
for ax in axes:
ax.set_xlabel('x')
ax.grid(True, alpha=0.3)
fig.suptitle('Drei Subplots in einer Zeile', fontsize=14)
plt.show()
Beispiel 3: 2x2-Raster + Breiten-/Höhenverhältnisse
Beispiel
import numpy as np
# Seitenverhältnis: Zeile 1 ist höher, Spalte 2 ist breiter
fig, axes = plt.subplots(2, 2,
figsize=(10, 8),
width_ratios=[1, 2], # Breite von Spalte 2 ist 2-mal so groß wie Spalte 1
height_ratios=[2, 1], # Höhe von Zeile 1 ist 2-mal so groß wie Zeile 2
layout='constrained',
sharex='col', # Jede Spalte verwendet dieselbe x-Achse
sharey='row') # Jede Zeile verwendet dieselbe y-Achse
x = np.linspace(0, 10, 100)
# axes ist ein 2D-Array, axes[row, col]
axes[0, 0].plot(x, np.sin(x))
axes[0, 0].set_title('sin(x)')
axes[0, 1].plot(x, np.cos(x), 'orange')
axes[0, 1].set_title('cos(x)')
axes[1, 0].plot(x, np.sin(2*x), 'green')
axes[1, 0].set_title('sin(2x)')
axes[1, 1].plot(x, np.cos(2*x), 'red')
axes[1, 1].set_title('cos(2x)')
fig.suptitle('2x2-Raster mit Breiten-/Höhenverhältnissen', fontsize=14)
plt.show()
Beispiel 4: sharex und sharey Gemeinsame Achsen
Beispiel
import numpy as np
np.random.seed(42)
# x-Achse teilen für einfachen Zeitreihenvergleich
fig, axes = plt.subplots(3, 1, figsize=(8, 6),
sharex=True, # x-Achse teilen
layout='constrained')
t = np.linspace(0, 20, 200)
# Drei Subplots teilen die x-Achse, ausgerichtet an denselben Zeitpunkten
axes[0].plot(t, np.sin(t), 'blue')
axes[0].set_ylabel('Signal 1')
axes[0].grid(True, alpha=0.3)
axes[1].plot(t, np.cos(t * 1.5), 'green')
axes[1].set_ylabel('Signal 2')
axes[1].grid(True, alpha=0.3)
axes[2].plot(t, np.sin(t * 0.7) + np.cos(t * 1.3), 'red')
axes[2].set_xlabel('Zeit (s)')
axes[2].set_ylabel('Signal 3')
axes[2].grid(True, alpha=0.3)
fig.suptitle('Gemeinsame X-Achse: Drei Zeitreihen', fontsize=14)
plt.show()
Beispiel 5: Polarer Subplot
Beispiel
import numpy as np
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4),
subplot_kw={'projection': 'polar'}, # Beide sind Polarkoordinaten
layout='constrained')
theta = np.linspace(0, 2 * np.pi, 100)
# Linkes Diagramm: Rosettenkurve
r1 = np.abs(np.sin(3 * theta))
ax1.plot(theta, r1, color='blue', linewidth=2)
ax1.set_title('Polar: Rosettenkurve (r=|sin(3θ))')
# Rechtes Diagramm: Archimedische Spirale
r2 = theta / 6
ax.plot(theta, r2, color='red', linewidth=2)
ax2.set_title('Polar: Archimedische Spirale')
plt.show()
Häufige Fragen
Was bewirkt der squeeze-Parameter?
squeeze=TrueWenn (Standard):subplots(1,1)zurückgibtaxohne [ax],subplots(1,3)gibt ein 1D-Array zurück.
squeeze=FalseWenn, gibt es immer ein 2D-Array zurück (unabhängig von der Anzahl der Zeilen/Spalten), geeignet für Szenarien, die eine einheitliche Verarbeitung erfordern.
Der Unterschied zwischen subplot_kw und gridspec_kw?
subplot_kwWird an jede Axes-Erstellungsfunktion übergeben, wie z. B.projection='polar'。
gridspec_kwWird an den GridSpec-Layout-Manager übergeben, wie z. B.hspace=0.4(vertikaler Abstand der Subplots).
Andere Erweiterungen