Hinweis
Zum Ende springen, um den vollständigen Beispielcode herunterzuladen.
Konturdiagramm von unregelmäßig verteilten Daten#
Vergleich eines Konturdiagramms von unregelmäßig verteilten Daten, die auf ein regelmäßiges Gitter interpoliert wurden, mit einem Tricontour-Diagramm für ein unstrukturiertes Dreiecksgitter.
Da contour und contourf erwarten, dass die Daten auf einem regelmäßigen Gitter liegen, erfordert die Darstellung eines Konturdiagramms von unregelmäßig verteilten Daten andere Methoden. Die beiden Optionen sind:
Interpolieren Sie die Daten zuerst auf ein regelmäßiges Gitter. Dies kann mit integrierten Mitteln erfolgen, z. B. über
LinearTriInterpolatoroder unter Verwendung externer Funktionalität, z. B. überscipy.interpolate.griddata. Plotten Sie dann die interpolierten Daten mit dem üblichencontour.Verwenden Sie direkt
tricontourodertricontourf, die intern eine Triangulierung durchführen.
Dieses Beispiel zeigt beide Methoden in Aktion.
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.tri as tri
np.random.seed(19680801)
npts = 200
ngridx = 100
ngridy = 200
x = np.random.uniform(-2, 2, npts)
y = np.random.uniform(-2, 2, npts)
z = x * np.exp(-x**2 - y**2)
fig, (ax1, ax2) = plt.subplots(nrows=2)
# -----------------------
# Interpolation on a grid
# -----------------------
# A contour plot of irregularly spaced data coordinates
# via interpolation on a grid.
# Create grid values first.
xi = np.linspace(-2.1, 2.1, ngridx)
yi = np.linspace(-2.1, 2.1, ngridy)
# Linearly interpolate the data (x, y) on a grid defined by (xi, yi).
triang = tri.Triangulation(x, y)
interpolator = tri.LinearTriInterpolator(triang, z)
Xi, Yi = np.meshgrid(xi, yi)
zi = interpolator(Xi, Yi)
# Note that scipy.interpolate provides means to interpolate data on a grid
# as well. The following would be an alternative to the four lines above:
# from scipy.interpolate import griddata
# zi = griddata((x, y), z, (xi[None, :], yi[:, None]), method='linear')
ax1.contour(xi, yi, zi, levels=14, linewidths=0.5, colors='k')
cntr1 = ax1.contourf(xi, yi, zi, levels=14, cmap="RdBu_r")
fig.colorbar(cntr1, ax=ax1)
ax1.plot(x, y, 'ko', ms=3)
ax1.set(xlim=(-2, 2), ylim=(-2, 2))
ax1.set_title('grid and contour (%d points, %d grid points)' %
(npts, ngridx * ngridy))
# ----------
# Tricontour
# ----------
# Directly supply the unordered, irregularly spaced coordinates
# to tricontour.
ax2.tricontour(x, y, z, levels=14, linewidths=0.5, colors='k')
cntr2 = ax2.tricontourf(x, y, z, levels=14, cmap="RdBu_r")
fig.colorbar(cntr2, ax=ax2)
ax2.plot(x, y, 'ko', ms=3)
ax2.set(xlim=(-2, 2), ylim=(-2, 2))
ax2.set_title('tricontour (%d points)' % npts)
plt.subplots_adjust(hspace=0.5)
plt.show()

Referenzen
Die Verwendung der folgenden Funktionen, Methoden, Klassen und Module wird in diesem Beispiel gezeigt
Gesamtlaufzeit des Skripts: (0 Minuten 1,378 Sekunden)