Matplotlib subplots()-Funktion


Matplotlib 参考文档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

ParameterTypeBeschreibung
nrowsintAnzahl der Subplot-Zeilen, Standard: 1
ncolsintAnzahl der Subplot-Spalten, Standard: 1
sharex / shareybool oder strOb die x/y-Achsen gemeinsam genutzt werden. Es können 'all'/'row'/'col'/'none' oder boolesche Werte übergeben werden
squeezeboolWenn True, werden automatisch zusätzliche Dimensionen für einzelne Zeile/Spalte entfernt, Standard: True
width_ratiosListeBreitenverhältnis jeder Spalte, z. B. [1, 2] bedeutet, Spalte 2 ist zweimal so breit wie Spalte 1
height_ratiosListeHöhenverhältnis jeder Zeile, z. B. [2, 1] bedeutet, Zeile 1 ist zweimal so hoch wie Zeile 2
subplot_kwdictParameter, die an die Subplot-Erstellung übergeben werden, z. B. dict(projection='polar'), um ein Polar-Subplot zu erstellen
gridspec_kwdictParameter, die an GridSpec übergeben werden, z. B. dict(hspace=0.3, wspace=0.3), um den Subplot-Abstand festzulegen
**fig_kwdictParameter, 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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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).


Matplotlib 参考文档Matplotlib-Referenzdokumentation

Andere Erweiterungen