Einführung
In diesem Lab wird gezeigt, wie man Matplotlib verwendet, um Relief-Hillshading-Darstellungen mit unterschiedlichen Mischmodi und vertikaler Vergrößerung zu erstellen. Das Ziel von Hillshading ist es, aus visuellen Gründen einen 3D-ähnlichen Effekt auf 2D-Karten zu erzeugen. In diesem Lab werden wir lernen, wie man die Mischmodi und die vertikale Vergrößerung ändert, um verschiedene visuelle Effekte zu erzielen.
Tipps für die VM
Nachdem der Start der VM abgeschlossen ist, klicken Sie in der linken oberen 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 der Einschränkungen von 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.
Importieren der erforderlichen Bibliotheken
Wir beginnen mit dem Importieren der erforderlichen Bibliotheken, einschließlich Matplotlib, NumPy und LightSource.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.cbook import get_sample_data
from matplotlib.colors import LightSource
Laden der Daten
Als nächstes laden wir die Beispielhöhendaten mit der Funktion get_sample_data aus Matplotlib. Anschließend extrahieren wir die Höheninformationen und die Zellengröße des Gitters.
dem = get_sample_data('jacksboro_fault_dem.npz')
z = dem['elevation']
dx, dy = dem['dx'], dem['dy']
Festlegen der Zellengröße
Wenn Sie eine topografisch genaue vertikale Vergrößerung benötigen oder nicht raten möchten, was der Wert von vert_exag sein sollte, müssen Sie die Zellengröße des Gitters angeben (d.h. die Parameter dx und dy). Andernfalls wird jeder von Ihnen angegebene vert_exag-Wert relativ zum Gitterschrittweite Ihrer Eingabedaten sein. In diesem Schritt berechnen wir die dx- und dy-Werte in Metern.
dy = 111200 * dy
dx = 111200 * dx * np.cos(np.radians(dem['ymin']))
Festlegen der Lichtquelle und der Farbskala
Wir legen das LightSource-Objekt fest, indem wir die Azimut- und Höhenwinkel der Lichtquelle festlegen. Wir legen auch die Farbskala fest, die im Diagramm verwendet werden soll.
ls = LightSource(azdeg=315, altdeg=45)
cmap = plt.cm.gist_earth
Erstellen des Diagramms
Wir erstellen ein 4x3-Diagrammnetz, um die hügelnischen Darstellungen mit verschiedenen Mischmodi und vertikalen Vergrößerungen anzuzeigen. Wir zeigen in der ersten Zeile zunächst das hügelnische Intensitätsbild und platzieren dann in den verbleibenden Zeilen hügelnische Darstellungen mit verschiedenen Mischmodi. Wir verwenden eine for-Schleife, um durch die verschiedenen vertikalen Vergrößerungswerte und Mischmodi zu iterieren.
fig, axs = plt.subplots(nrows=4, ncols=3, figsize=(8, 9))
plt.setp(axs.flat, xticks=[], yticks=[])
for col, ve in zip(axs.T, [0.1, 1, 10]):
col[0].imshow(ls.hillshade(z, vert_exag=ve, dx=dx, dy=dy), cmap='gray')
for ax, mode in zip(col[1:], ['hsv', 'overlay','soft']):
rgb = ls.shade(z, cmap=cmap, blend_mode=mode,
vert_exag=ve, dx=dx, dy=dy)
ax.imshow(rgb)
Bezeichnen des Diagramms
Wir bezeichnen die Zeilen und Spalten des Diagrammnetzes mit den Funktionen set_title und set_ylabel. Wir fügen auch einen Titel für die Gruppen der vertikalen Vergrößerung und des Mischmodus hinzu.
for ax, ve in zip(axs[0], [0.1, 1, 10]):
ax.set_title(f'{ve}', size=18)
for ax, mode in zip(axs[:, 0], ['Hillshade', 'hsv', 'overlay','soft']):
ax.set_ylabel(mode, size=18)
axs[0, 1].annotate('Vertical Exaggeration', (0.5, 1), xytext=(0, 30),
textcoords='offset points', xycoords='axes fraction',
ha='center', va='bottom', size=20)
axs[2, 0].annotate('Blend Mode', (0, 0.5), xytext=(-30, 0),
textcoords='offset points', xycoords='axes fraction',
ha='right', va='center', size=20, rotation=90)
fig.subplots_adjust(bottom=0.05, right=0.95)
Anzeigen des Diagramms
Schließlich zeigen wir das Diagramm mit der show-Funktion an.
plt.show()
Zusammenfassung
In diesem Lab haben wir gelernt, wie man mit Matplotlib hügelnische Höhenschattierungen erstellt. Wir haben verschiedene Mischmodi und vertikale Vergrößerungen verwendet, um unterschiedliche visuelle Effekte zu erzielen. Wir haben auch gelernt, wie man die Zellengröße des Gitters für eine topografisch genaue vertikale Vergrößerung angeben kann.