Sombreado de relieve topográfico con Matplotlib

Beginner

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

Introducción

Esta práctica demuestra cómo utilizar Matplotlib para crear gráficos de sombreado de relieve topográfico utilizando diferentes modos de mezcla y exageración vertical. El propósito del sombreado de relieve es para fines visuales, crear un efecto similar a 3D en mapas bidimensionales. En esta práctica, aprenderemos cómo cambiar los modos de mezcla y la exageración vertical para lograr diferentes efectos visuales.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Importar las bibliotecas necesarias

Comenzamos importando las bibliotecas necesarias, incluyendo Matplotlib, NumPy y LightSource.

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

Cargar los datos

A continuación, cargamos los datos de elevación de muestra utilizando la función get_sample_data de Matplotlib. Luego, extraemos los datos de elevación y el tamaño de celda de la cuadrícula.

dem = get_sample_data('jacksboro_fault_dem.npz')
z = dem['elevation']
dx, dy = dem['dx'], dem['dy']

Especificar el tamaño de celda

Si necesita una exageración vertical topográficamente precisa, o no desea adivinar cuál debería ser el valor de vert_exag, tendrá que especificar el tamaño de celda de la cuadrícula (es decir, los parámetros dx y dy). De lo contrario, cualquier valor de vert_exag que especifique será relativo al espaciado de la cuadrícula de sus datos de entrada. En este paso, calculamos los valores de dx y dy en metros.

dy = 111200 * dy
dx = 111200 * dx * np.cos(np.radians(dem['ymin']))

Especificar la fuente de luz y la paleta de colores

Especificamos el objeto LightSource estableciendo la azimuth y la altitude de la fuente de luz. También establecemos la paleta de colores que se utilizará en la gráfica.

ls = LightSource(azdeg=315, altdeg=45)
cmap = plt.cm.gist_earth

Crear la gráfica

Creamos una cuadrícula de gráficas de 4x3 para mostrar las gráficas con sombreado de colinas con diferentes modos de mezcla y exageración vertical. Primero mostramos la imagen de intensidad de sombreado de colinas en la primera fila, y luego colocamos gráficas con sombreado de colinas con diferentes modos de mezcla en el resto de las filas. Utilizamos un bucle for para iterar a través de los diferentes valores de exageración vertical y modos de mezcla.

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)

Etiquetar la gráfica

Etiquetamos las filas y columnas de la cuadrícula de gráficas utilizando las funciones set_title y set_ylabel. También agregamos un título para los grupos de exageración vertical y modo de mezcla.

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)

Mostrar la gráfica

Finalmente, mostramos la gráfica utilizando la función show.

plt.show()

Resumen

En este laboratorio, aprendimos cómo crear gráficas de sombreado de relieve utilizando Matplotlib. Utilizamos diferentes modos de mezcla y exageración vertical para lograr diferentes efectos visuales. También aprendimos cómo especificar el tamaño de celda de la cuadrícula para una exageración vertical topográficamente precisa.