Matplotlib imshow()-Funktion


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

ParameterTypeBeschreibung
Xarray-ähnlich oder PIL ImageDie anzuzeigenden Bilddaten. Ein 2D-Array wird als Graustufen-/Pseudofarbdarstellung angezeigt, und ein 3D-Array (MxNx3 oder MxNx4) wird als RGB-/RGBA-Bild angezeigt.
cmapstr oder ColormapFarbzuordnung, nur für 2D-Daten gültig. Standard ist 'viridis'.
normNormalize oder strDaten-Normalisierungsmethode, z. B. 'linear', 'log', 'symlog'.
aspectstr oder floatPixel-Seitenverhältnis: 'equal' (Standard, quadratische Pixel), 'auto' (füllt die Axes automatisch aus), Zahl (benutzerdefiniertes Verhältnis).
interpolationstrInterpolationsmethode: 'none'/'nearest' (keine Interpolation), 'bilinear', 'bicubic', 'antialiased' (Standard), usw.
Alphafloat oder array-ähnlichTransparenz, 0-1.
vmin, vmaxfloatDatenbereich der Colormap.
originstrUrsprungsposition: 'upper' (Standard, [0,0] in der oberen linken Ecke) oder 'lower' ([0,0] in der unteren linken Ecke).
extentTupel (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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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).


Matplotlib 参考文档Matplotlib-Referenzdokumentation

Andere Erweiterungen