Ombrage de relief avec Matplotlib

PythonPythonBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

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.