Benutzerdefiniertes Hillshading in einem 3D-Oberflächenplot

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 wird gezeigt, wie man benutzerdefiniertes Hillshading in einem 3D-Oberflächenplot mit Python Matplotlib verwendet. Hillshading ist die Verwendung von Licht und Schatten, um die Wahrnehmung der Tiefe und Relief in einem 3D-Plot zu verbessern. Indem wir das Hillshading anpassen, können wir einen visuell ansprechenderen und informativeren Plot erstellen.

Tipps für die VM

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

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback ab, und wir werden das Problem für Sie prompt beheben.

Daten laden und formatieren

In diesem Schritt laden und formatieren wir die Daten für den 3D-Oberflächenplot. Wir verwenden einen Beispiel-Datensatz namens "jacksboro_fault_dem.npz".

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cbook, cm
from matplotlib.colors import LightSource

## Daten laden und formatieren
dem = cbook.get_sample_data('jacksboro_fault_dem.npz')
z = dem['elevation']
nrows, ncols = z.shape
x = np.linspace(dem['xmin'], dem['xmax'], ncols)
y = np.linspace(dem['ymin'], dem['ymax'], nrows)
x, y = np.meshgrid(x, y)

Region = np.s_[5:50, 5:50]
x, y, z = x[region], y[region], z[region]

Plot einrichten

In diesem Schritt richten wir den Plot für den 3D-Oberflächenplot ein. Wir verwenden ein LightSource-Objekt, um das Hillshading zu personalisieren.

## Plot einrichten
fig, ax = plt.subplots(subplot_kw=dict(projection='3d'))

ls = LightSource(270, 45)
## Um einen benutzerdefinierten Hillshading-Modus zu verwenden, überschreiben Sie das integrierte Shading und übergeben
## die rgb-Farben der geschatteten Fläche, berechnet aus "shade".
rgb = ls.shade(z, cmap=cm.gist_earth, vert_exag=0.1, blend_mode='soft')
surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, facecolors=rgb,
                       linewidth=0, antialiased=False, shade=False)

plt.show()

Hillshading anpassen

In diesem Schritt passen wir das Hillshading an, indem wir das integrierte Shading überschreiben und die RGB-Farben der geschatteten Fläche, die aus "shade" berechnet wurden, übergeben.

## Plot einrichten
fig, ax = plt.subplots(subplot_kw=dict(projection='3d'))

ls = LightSource(270, 45)
## Um einen benutzerdefinierten Hillshading-Modus zu verwenden, überschreiben Sie das integrierte Shading und übergeben
## die rgb-Farben der geschatteten Fläche, berechnet aus "shade".
rgb = ls.shade(z, cmap=cm.gist_earth, vert_exag=0.1, blend_mode='soft')
surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, facecolors=rgb,
                       linewidth=0, antialiased=False, shade=False)

plt.show()

Überprüfen und überarbeiten

Überprüfen Sie den Code und führen Sie alle erforderlichen Änderungen durch. Stellen Sie sicher, dass der Code korrekt ist und gut kommentiert ist.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man in einem 3D-Oberflächenplot mit Python Matplotlib benutzerdefiniertes Hillshading verwendet. Indem wir das Hillshading anpassen, konnten wir einen visuell ansprechenderen und informativeren Plot erstellen.