Introduction
Ce laboratoire montre comment utiliser Matplotlib pour créer des graphiques de relief en utilisant différents modes de fusion et une exagération verticale variable. Le but du relief est d'obtenir un effet 3D sur des cartes 2D à des fins visuelles. Dans ce laboratoire, nous allons apprendre à modifier les modes de fusion et l'exagération verticale pour obtenir différents effets visuels.
Conseils sur la VM
Une fois le démarrage de la VM terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.
Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limites de Jupyter Notebook.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.
Importation des bibliothèques requises
Nous commençons par importer les bibliothèques requises, y compris Matplotlib, NumPy et LightSource.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.cbook import get_sample_data
from matplotlib.colors import LightSource
Charger les données
Ensuite, nous chargeons les données d'altitude d'échantillonnage à l'aide de la fonction get_sample_data de Matplotlib. Nous extrayons ensuite les données d'altitude et la taille des cellules de la grille.
dem = get_sample_data('jacksboro_fault_dem.npz')
z = dem['elevation']
dx, dy = dem['dx'], dem['dy']
Spécifier la taille des cellules
Si vous avez besoin d'une exagération verticale topographiquement précise, ou si vous ne voulez pas deviner quelle valeur vert_exag doit être, vous devrez spécifier la taille des cellules de la grille (c'est-à-dire les paramètres dx et dy). Sinon, toute valeur vert_exag que vous spécifiez sera relative à l'espacement de la grille de vos données d'entrée. Dans cette étape, nous calculons les valeurs de dx et dy en mètres.
dy = 111200 * dy
dx = 111200 * dx * np.cos(np.radians(dem['ymin']))
Spécifier la source de lumière et la carte de couleurs
Nous spécifions l'objet LightSource en définissant l'azimut et l'altitude de la source de lumière. Nous définissons également la carte de couleurs à utiliser dans le tracé.
ls = LightSource(azdeg=315, altdeg=45)
cmap = plt.cm.gist_earth
Créer le tracé
Nous créons une grille de tracé 4x3 pour afficher les tracés ombragés de collines avec différents modes de mélange et exagération verticale. Nous montrons d'abord l'image d'intensité d'ombrage de colline dans la première ligne, puis nous plaçons des tracés ombragés de collines avec différents modes de mélange dans les autres lignes. Nous utilisons une boucle for pour itérer à travers les différentes valeurs d'exagération verticale et les modes de mélange.
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)
Etiqueter le tracé
Nous étiquetons les lignes et les colonnes de la grille de tracé à l'aide des fonctions set_title et set_ylabel. Nous ajoutons également un titre pour les groupes d'exagération verticale et de mode de mélange.
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)
Afficher le tracé
Enfin, nous affichons le tracé à l'aide de la fonction show.
plt.show()
Sommaire
Dans ce laboratoire, nous avons appris à créer des tracés d'ombrage de relief avec Matplotlib. Nous avons utilisé différents modes de mélange et des exagérations verticales variables pour obtenir différents effets visuels. Nous avons également appris à spécifier la taille des cellules de la grille pour une exagération verticale topographiquement précise.