Matplotlib imshow()-Funktion
Matplotlib-Referenzdokumentation
imshow()Wird verwendet, um ein Bild auf einer Axes anzuzeigen oder ein 2D-Array als Heatmap darzustellen.
Es ist eine der am häufigsten verwendeten Funktionen für die 2D-Datenvisualisierung und unterstützt eine Vielzahl von Interpolations-, Farbzuordnungs- und Skalierungsmethoden.
Funktionsdefinition
pyplot-Schnittstelle
matplotlib.pyplot.imshow(X, cmap=None, norm=None, *, aspect=None,
interpolation=None, alpha=None, vmin=None, vmax=None, origin=None,
extent=None, filternorm=True, filterrad=4.0, resample=None,
url=None, **kwargs)
Axes-Schnittstelle
Axes.imshow(X, cmap=None, norm=None, *, aspect=None,
interpolation=None, alpha=None, vmin=None, vmax=None, origin=None,
extent=None, filternorm=True, filterrad=4.0, resample=None,
url=None, **kwargs)
Parameterbeschreibung
| Parameter | Type | Beschreibung |
|---|---|---|
| X | array-ähnlich oder PIL Image | Die anzuzeigenden Bilddaten. Ein 2D-Array wird als Graustufen-/Pseudofarbdarstellung angezeigt, und ein 3D-Array (MxNx3 oder MxNx4) wird als RGB-/RGBA-Bild angezeigt. |
| cmap | str oder Colormap | Farbzuordnung, nur für 2D-Daten gültig. Standard ist 'viridis'. |
| norm | Normalize oder str | Daten-Normalisierungsmethode, z. B. 'linear', 'log', 'symlog'. |
| aspect | str oder float | Pixel-Seitenverhältnis: 'equal' (Standard, quadratische Pixel), 'auto' (füllt die Axes automatisch aus), Zahl (benutzerdefiniertes Verhältnis). |
| interpolation | str | Interpolationsmethode: 'none'/'nearest' (keine Interpolation), 'bilinear', 'bicubic', 'antialiased' (Standard), usw. |
| Alpha | float oder array-ähnlich | Transparenz, 0-1. |
| vmin, vmax | float | Datenbereich der Colormap. |
| origin | str | Ursprungsposition: 'upper' (Standard, [0,0] in der oberen linken Ecke) oder 'lower' ([0,0] in der unteren linken Ecke). |
| extent | Tupel (left,right,bottom,top) | Koordinaten der Datengrenzen; ändert die Achsenbeschriftungen, aber nicht die Daten. |
origin='upper'(Standard) Platziert die erste Zeile des Arrays oben, entsprechend den Konventionen der Bildanzeige.origin='lower'Platziert die erste Zeile unten, entsprechend den mathematischen Koordinatenkonventionen.
Anwendungsbeispiele
Beispiel 1: Anzeigen eines 2D-Arrays (Heatmap)
Beispiel
import numpy as np
# Erstelle ein 10x10 2D-Array
np.random.seed(42)
data = np.random.rand(10, 10)
fig, ax = plt.subplots(figsize=(6, 5), layout='constrained')
# Als Heatmap anzeigen
im = ax.imshow(data, cmap='viridis', aspect='auto')
# Werte in jeder Zelle anzeigen
for i in range(10):
for j in range(10):
color = 'white' if data[i, j] > 0.5 else 'black'
ax.text(j, i, f'{data[i,j]:.2f}', ha='center',
va='center', color=color, fontsize=8)
# Eine Farbleiste hinzufügen
fig.colorbar(im, ax=ax, label='Wert', shrink=0.8)
ax.set_title('2D-Array als Heatmap')
ax.set_xlabel('Spalte')
ax.set_ylabel('Zeile')
plt.show()
Beispiel 2: Der Parameter extent steuert die Achsen
Beispiel
import numpy as np
# 50x50-Daten einer mathematischen Funktion erzeugen
x = np.linspace(-3, 3, 50)
y = np.linspace(-3, 3, 50)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5),
layout='constrained')
# Linker Plot: ohne extent, Achsenkoordinaten sind Pixelindizes
im1 = ax1.imshow(Z, cmap='RdYlBu', origin='lower')
ax1.set_title('Ohne extentn(Pixelindizes)')
fig.colorbar(im1, ax=ax1, shrink=0.8)
# Rechter Plot: mit extent, Achsenkoordinaten sind tatsächliche Datenkoordinaten
im2 = ax2.imshow(Z, cmap='RdYlBu', origin='lower',
extent=[-3, 3, -3, 3]) # [xmin, xmax, ymin, ymax]
ax2.set_title('Mit extentn(tatsächlichen Koordinaten)')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
fig.colorbar(im2, ax=ax2, shrink=0.8)
plt.show()
Beispiel 3: Vergleich verschiedener Interpolationsmethoden
Beispiel
import numpy as np
# Erstelle einen kleinen Datensatz (10x10) und vergrößere ihn, um Interpolationsunterschiede zu zeigen
data = np.random.rand(10, 10)
interpolations = ['none', 'nearest', 'bilinear', 'bicubic',
'spline16', 'spline36', 'lanczos']
# lanczos wurde umbenannt - verwende stattdessen 'lanczos'
fig, axes = plt.subplots(2, 3, figsize=(12, 8),
layout='constrained')
axes = axes.flatten()
for ax, interp in zip(axes, interpolations):
im = ax.imshow(data, cmap='viridis', interpolation=interp)
ax.set_title(f'interpolation="{interp}"')
ax.set_xticks([])
ax.set_yticks([])
# Den letzten überflüssigen Subplot ausblenden
axes[-1].set_visible(False)
fig.suptitle('Vergleich von Interpolationsmethoden', fontsize=14)
plt.show()
Beispiel 4: Anzeigen eines echten Bildes (RGB)
Beispiel
import numpy as np
# Ein "Farbverlauf"-Bild erstellen (simuliert ein RGB-Bild)
# Höhe 100, Breite 200, 3 Farbkanäle
height, width = 100, 200
image = np.zeros((height, width, 3))
# R-Kanal: nimmt von links nach rechts zu
image[:, :, 0] = np.linspace(0, 1, width)
# G-Kanal: nimmt von unten nach oben zu
image[:, :, 1] = np.linspace(0, 1, height).reshape(-1, 1)
# B-Kanal: Verlauf entlang der diagonalen Richtung
image[:, :, 2] = np.sin(np.linspace(0, 4*np.pi, width)) * 0.5 + 0.5
fig, ax = plt.subplots(figsize=(8, 4), layout='constrained')
# Ein 3D-Array (M,N,3) wird automatisch als RGB-Bild erkannt, cmap nicht erforderlich
ax.imshow(image)
ax.set_title('Synthetisches RGB-Bild')
ax.set_xlabel('Breite (Pixel)')
ax.set_ylabel('Höhe (Pixel)')
plt.show()
print("Beispiel: Bild angezeigt")
Beispiel 5: Logarithmische Normalisierung
Beispiel
import numpy as np
from matplotlib.colors import LogNorm
# Daten mit großem Wertebereich erstellen
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.exp(-(X**2 + Y**2) / 2) * 1000 # Gauß-Funktion, Werte von 0 bis 1000
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5),
layout='constrained')
# Linker Plot: lineare Normalisierung (Standard)
im1 = ax1.imshow(Z, cmap='hot')
ax1.set_title('Lineare Normalisierung')
fig.colorbar(im1, ax=ax1, shrink=0.8)
Rechter Plot: logarithmische Normalisierung (LogNorm)
im2 = ax2.imshow(Z, cmap='hot', norm=LogNorm())
ax2.set_title('Logarithmische Normalisierung (LogNorm)')
fig.colorbar(im2, ax=ax2, shrink=0.8)
fig.suptitle('Lineare vs. logarithmische Normalisierung', fontsize=14)
plt.show()
Häufig gestellte Fragen
Was ist der Unterschied zwischen origin='upper' und 'lower'?
origin='upper'(Standard): Array [0, 0] befindet sich in der oberen linken Ecke, die y-Achse verläuft von oben nach unten, geeignet für Bilder.
origin='lower': Array [0, 0] befindet sich in der unteren linken Ecke, die y-Achse verläuft von unten nach oben, geeignet für mathematische/wissenschaftliche Daten.
Kann verwendet werden, umplt.rcParams['image.origin'] = 'lower'das Standardverhalten global zu ändern.
Wie wählt man zwischen imshow und pcolormesh?
imshow()Geeignet für reguläre Gitter, große Datenmengen und schnelles Rendering (rasterisierungsbasiert).
pcolormesh()Geeignet für unregelmäßige Gitter und Fälle, die präzise Gittergrenzen erfordern (vektorbasiertes Zeichnen).
Wie zeigt man Graustufenbilder an?
Setcmap='gray'odercmap='Greys_r'(Graustufeninversion).
Andere Erweiterungen