pcolormesh-Gitter und Schattierung#

axes.Axes.pcolormesh und pcolor haben einige Optionen für die Anordnung von Gittern und die Schattierung zwischen den Gitterpunkten.

Im Allgemeinen, wenn Z die Form (M, N) hat, dann können das Gitter X und Y mit der Form (M+1, N+1) oder (M, N) angegeben werden, abhängig vom Argument für das Schlüsselwortargument shading. Beachten Sie, dass wir unten Vektoren x als Länge N oder N+1 und y als Länge M oder M+1 angeben, und pcolormesh intern die Gittermatrizen X und Y aus den Eingabevektoren erstellt.

import matplotlib.pyplot as plt
import numpy as np

Flache Schattierung#

Die Gitterangabe mit den wenigsten Annahmen ist shading='flat' und wenn das Gitter in jeder Dimension um eins größer als die Daten ist, d.h. die Form (M+1, N+1) hat. In diesem Fall geben X und Y die Ecken von Vierecken an, die mit den Werten in Z gefärbt werden. Hier geben wir die Kanten der (3, 5) Vierecke mit X und Y an, die (4, 6) sind.

nrows = 3
ncols = 5
Z = np.arange(nrows * ncols).reshape(nrows, ncols)
x = np.arange(ncols + 1)
y = np.arange(nrows + 1)

fig, ax = plt.subplots()
ax.pcolormesh(x, y, Z, shading='flat', vmin=Z.min(), vmax=Z.max())


def _annotate(ax, x, y, title):
    # this all gets repeated below:
    X, Y = np.meshgrid(x, y)
    ax.plot(X.flat, Y.flat, 'o', color='m')
    ax.set_xlim(-0.7, 5.2)
    ax.set_ylim(-0.7, 3.2)
    ax.set_title(title)

_annotate(ax, x, y, "shading='flat'")
shading='flat'

Flache Schattierung, Gitter gleicher Form#

Oft werden Daten jedoch so bereitgestellt, dass X und Y die Form von Z haben. Während dies für andere shading-Typen sinnvoll ist, ist es nicht erlaubt, wenn shading='flat' ist. Historisch hat Matplotlib in diesem Fall die letzte Zeile und Spalte von Z stillschweigend verworfen, um das Verhalten von Matlab nachzuahmen. Wenn dieses Verhalten immer noch gewünscht ist, verwerfen Sie einfach die letzte Zeile und Spalte manuell

x = np.arange(ncols)  # note *not* ncols + 1 as before
y = np.arange(nrows)
fig, ax = plt.subplots()
ax.pcolormesh(x, y, Z[:-1, :-1], shading='flat', vmin=Z.min(), vmax=Z.max())
_annotate(ax, x, y, "shading='flat': X, Y, C same shape")
shading='flat': X, Y, C same shape

Nächste Schattierung, Gitter gleicher Form#

Normalerweise ist das Verwerfen einer Zeile und Spalte von Daten nicht das, was der Benutzer meint, wenn er X, Y und Z alle die gleiche Form hat. Für diesen Fall erlaubt Matplotlib shading='nearest' und zentriert die gefärbten Vierecke auf den Gitterpunkten.

Wenn ein Gitter mit falscher Form mit shading='nearest' übergeben wird, wird ein Fehler ausgelöst.

fig, ax = plt.subplots()
ax.pcolormesh(x, y, Z, shading='nearest', vmin=Z.min(), vmax=Z.max())
_annotate(ax, x, y, "shading='nearest'")
shading='nearest'

Automatische Schattierung#

Es ist möglich, dass der Benutzer möchte, dass der Code automatisch wählt, welche Option verwendet werden soll. In diesem Fall wählt shading='auto' basierend auf den Formen von X, Y und Z, ob 'flat' oder 'nearest' Schattierung verwendet werden soll.

fig, axs = plt.subplots(2, 1, layout='constrained')
ax = axs[0]
x = np.arange(ncols)
y = np.arange(nrows)
ax.pcolormesh(x, y, Z, shading='auto', vmin=Z.min(), vmax=Z.max())
_annotate(ax, x, y, "shading='auto'; X, Y, Z: same shape (nearest)")

ax = axs[1]
x = np.arange(ncols + 1)
y = np.arange(nrows + 1)
ax.pcolormesh(x, y, Z, shading='auto', vmin=Z.min(), vmax=Z.max())
_annotate(ax, x, y, "shading='auto'; X, Y one larger than Z (flat)")
shading='auto'; X, Y, Z: same shape (nearest), shading='auto'; X, Y one larger than Z (flat)

Gouraud-Schattierung#

Gouraud-Schattierung kann ebenfalls angegeben werden, wobei die Farbe in den Vierecken linear zwischen den Gitterpunkten interpoliert wird. Die Formen von X, Y, Z müssen gleich sein.

fig, ax = plt.subplots(layout='constrained')
x = np.arange(ncols)
y = np.arange(nrows)
ax.pcolormesh(x, y, Z, shading='gouraud', vmin=Z.min(), vmax=Z.max())
_annotate(ax, x, y, "shading='gouraud'; X, Y same shape as Z")

plt.show()
shading='gouraud'; X, Y same shape as Z

Referenzen

Die Verwendung der folgenden Funktionen, Methoden, Klassen und Module wird in diesem Beispiel gezeigt

Gesamtlaufzeit des Skripts: (0 Minuten 5,039 Sekunden)

Galerie generiert von Sphinx-Gallery