pcolormesh Gitter und Schattierung #

axes.Axes.pcolormeshund pcolorhaben einige Optionen für die Anordnung der Gitter und die Schattierung zwischen den Gitterpunkten.

Wenn Z die Form (M, N) hat, können die Gitter X und Y im Allgemeinen entweder mit der Form (M+1, N+1) oder (M, N) angegeben werden, je nach Argument für das shadingSchlüsselwortargument. Beachten Sie, dass wir unten die Vektoren x entweder als Länge N oder N+1 und y als Länge M oder M+1 angeben und pcolormeshintern die Netzmatrizen X und Y aus den Eingabevektoren erstellen.

import matplotlib.pyplot as plt
import numpy as np

Flache Schattierung #

Die Gitterspezifikation mit den wenigsten Annahmen ist shading='flat' und wenn das Gitter eins größer als die Daten in jeder Dimension ist, dh 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 eingefä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'")
Schattierung='flach'

Flache Schattierung, gleichförmiges Gitter #

Häufig werden jedoch Daten bereitgestellt, bei denen X und Y mit der Form von Z übereinstimmen . Während dies für andere Typen sinnvoll shadingist, ist es nicht mehr zulässig shading='flat'(und löst ab Matplotlib v3.3 eine MatplotlibDeprecationWarning aus). In der Vergangenheit hat Matplotlib in diesem Fall die letzte Zeile und Spalte von Z stillschweigend gelöscht , um dem Verhalten von Matlab zu entsprechen. Wenn dieses Verhalten dennoch gewünscht ist, löschen 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 gleiche Form

Nächstgelegene Schattierung, gleiches Formraster #

Normalerweise ist es nicht das, was der Benutzer meint, wenn er eine Zeile und eine Spalte mit Daten fallen lässt, wenn er X , Y und Z alle in die gleiche Form bringt. Für diesen Fall erlaubt shading='nearest'und zentriert Matplotlib die farbigen Vierecke auf den Gitterpunkten.

Wenn ein Gitter, das nicht die richtige Form hat, mit shading='nearest' einem Fehler passiert 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'")
Schattierung='am nächsten'

Automatische Schattierung #

Es ist möglich, dass der Benutzer möchte, dass der Code automatisch wählt, was verwendet werden soll, in diesem Fall shading='auto'wird er entscheiden, ob er basierend auf den Formen von X , Y und Z 'flache' oder 'nächste' Schattierung verwendet .

fig, axs = plt.subplots(2, 1, constrained_layout=True)
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)")
Schattierung='auto';  X, Y, Z: gleiche Form (am nächsten), Schattierung='auto';  X, Y eins größer als Z (flach)

Gouraud-Schattierung #

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

fig, ax = plt.subplots(constrained_layout=True)
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()
Schattierung='Gouraud';  X, Y gleiche Form wie Z

Verweise

In diesem Beispiel wird die Verwendung der folgenden Funktionen, Methoden, Klassen und Module gezeigt:

Gesamtlaufzeit des Skripts: ( 0 Minuten 2.324 Sekunden)

Galerie generiert von Sphinx-Gallery