Matplotlib Konturbild

PythonPythonBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernst du, wie du mithilfe der Matplotlib-Bibliothek in Python ein Kontur-Bild erstellen kannst. Ein Kontur-Bild ist eine Visualisierungsmethode, die eine dreidimensionale Fläche mit einem zweidimensionalen Diagramm darstellt. Das Kontur-Bild besteht aus Konturlinien, die Punkte gleichen Werts in der Fläche verbinden, und gefüllten Konturen, die Gebiete zwischen den Konturlinien sind.

Tipps für die VM

Nachdem der Start der VM abgeschlossen ist, klicke in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal musst du einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn du während des Lernens Probleme hast, kannst du Labby gerne fragen. Gib nach der Sitzung Feedback, und wir werden das Problem für dich prompt beheben.

Bibliotheken importieren

In diesem Schritt importierst du die erforderlichen Bibliotheken, um das Kontur-Bild zu erstellen.

import matplotlib.pyplot as plt
import numpy as np

from matplotlib import cm

Die Daten definieren

In diesem Schritt definierst du die Daten, die geplottet werden sollen. Die Daten sind ein zweidimensionales Array von Werten, das die Fläche repräsentiert.

## Default delta ist groß, weil das die Geschwindigkeit erhöht und die
## richtige Registrierung zwischen Bild und Konturen veranschaulicht.
delta = 0.5

extent = (-3, 4, -4, 3)

x = np.arange(-3.0, 4.001, delta)
y = np.arange(-4.0, 3.001, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2

Das Kontur-Bild erstellen

In diesem Schritt erstellst du das Kontur-Bild, indem du die contour- und contourf-Funktionen von Matplotlib verwendest.

## Erhöhe die obere Grenze, um Abbruchfehler zu vermeiden.
levels = np.arange(-2.0, 1.601, 0.4)

norm = cm.colors.Normalize(vmax=abs(Z).max(), vmin=-abs(Z).max())
cmap = cm.PRGn

fig, _axs = plt.subplots(nrows=2, ncols=2)
fig.subplots_adjust(hspace=0.3)
axs = _axs.flatten()

cset1 = axs[0].contourf(X, Y, Z, levels, norm=norm,
                        cmap=cmap.resampled(len(levels) - 1))
## Dies ist nicht erforderlich, aber für die Farbkarte benötigen wir nur
## die Anzahl der Ebenen minus 1. Um Diskretisierungsfehler zu vermeiden,
## verwenden wir diese Zahl oder eine große Zahl wie die Standardzahl (256).

## Wenn wir sowohl Linien als auch gefüllte Bereiche möchten, müssen wir
## `contour` separat aufrufen; versuchen Sie nicht, die Kantenfarbe oder
## die Kantenbreite der Polygone in den von `contourf` zurückgegebenen
## Sammlungen zu ändern.
## Verwenden Sie die von der vorherigen Funktion zurückgegebenen Ebenen,
## um sicherzustellen, dass sie die gleichen sind.

cset2 = axs[0].contour(X, Y, Z, cset1.levels, colors='k')

## Wir brauchen eigentlich keine durchgezogenen Konturlinien, um negative
## Bereiche anzuzeigen, also schalten wir sie aus.

for c in cset2.collections:
    c.set_linestyle('solid')

## Hier ist es einfacher, eine separate `contour`-Funktion aufzurufen,
## als ein Array von Farben und Linienbreiten einzurichten.
## Wir erstellen eine dicke grüne Linie als Null-Kontur.
## Geben Sie die Null-Ebene als Tupel an, das nur 0 enthält.

cset3 = axs[0].contour(X, Y, Z, (0,), colors='g', linewidths=2)
axs[0].set_title('Gefüllte Konturen')
fig.colorbar(cset1, ax=axs[0])


axs[1].imshow(Z, extent=extent, cmap=cmap, norm=norm)
axs[1].contour(Z, levels, colors='k', origin='upper', extent=extent)
axs[1].set_title("Bild, Ursprung 'upper'")

axs[2].imshow(Z, origin='lower', extent=extent, cmap=cmap, norm=norm)
axs[2].contour(Z, levels, colors='k', origin='lower', extent=extent)
axs[2].set_title("Bild, Ursprung 'lower'")

## Wir verwenden hier die Interpolation "nearest", um die tatsächlichen
## Bildpixel anzuzeigen.
## Beachten Sie, dass die Konturlinien nicht bis an den Rand der Box
## reichen.
## Dies ist absichtlich. Die Z-Werte werden im Zentrum jedes
## Bildpixels (jedes Farbbereichs auf dem folgenden Subplot) definiert,
## so dass die konturierte Domäne nicht über diese Pixelzentren hinaus
## reicht.
im = axs[3].imshow(Z, interpolation='nearest', extent=extent,
                   cmap=cmap, norm=norm)
axs[3].contour(Z, levels, colors='k', origin='image', extent=extent)
ylim = axs[3].get_ylim()
axs[3].set_ylim(ylim[::-1])
axs[3].set_title("Ursprung aus rc, umgekehrte y-Achse")
fig.colorbar(im, ax=axs[3])

fig.tight_layout()
plt.show()

Zeige das Kontur-Bild an

In diesem Schritt zeigst du das Kontur-Bild an.

fig.tight_layout()
plt.show()

Zusammenfassung

In diesem Labyrinth hast du gelernt, wie man mithilfe der Matplotlib-Bibliothek in Python ein Kontur-Bild erstellt. Du hast begonnen, indem du die erforderlichen Bibliotheken importiert hast, die zu plottenden Daten definiert hast, das Kontur-Bild erstellt hast und das Bild angezeigt hast. Das Kontur-Bild ist eine nützliche Visualisierungsmethode, die verwendet werden kann, um eine dreidimensionale Fläche mit einem zweidimensionalen Plot darzustellen.