Saltar al contenido

# visualizacion-geospacial-avanzada-con-pygmt

Visualización Geospacial Avanzada con PyGMT

Volver a la portada del curso
Lectura (Markdown)

Instalación y Configuración

Sección 1 · Introducción a PyGMT

Instalación y configuración de PyGMT

PyGMT es la interfaz de Python para GMT (Generic Mapping Tools), el programa de mapas que usan geofísicos, oceanógrafos y sismólogos desde hace más de tres décadas. GMT está escrito en C y es muy rápido; PyGMT lo envuelve para que lo controles con funciones de Python y con tus datos de NumPy, pandas y xarray. Antes del primer mapa hay que entender una idea clave: instalar PyGMT no basta, también necesitas GMT.

Dos piezas: GMT y PyGMT

PyGMT no dibuja nada por sí mismo. Cada vez que llamas a fig.coast() o fig.grdimage(), PyGMT traduce la llamada y la envía a la biblioteca de GMT (libgmt en Linux y macOS, gmt_w64.dll en Windows). Si Python no encuentra esa biblioteca, el error aparece desde el primer import pygmt. Además, GMT usa Ghostscript para convertir sus figuras a PNG o PDF.

Instalación recomendada: conda-forge

La vía oficial y la más sencilla es conda (o mamba, que es más rápido). El paquete pygmt de conda-forge instala GMT, Ghostscript y todas las dependencias en un solo paso, en cualquier sistema operativo:

# En la terminal (no en Python):
# mamba create --name pygmt --channel conda-forge pygmt jupyterlab
# mamba activate pygmt
# jupyter lab

Un entorno aparte evita que las versiones de GDAL, PROJ o NetCDF que trae GMT choquen con las de otros proyectos.

Alternativa: pip y GMT por separado

Si ya trabajas con venv y pip, puedes instalar PyGMT con pip install pygmt, pero GMT se instala aparte (versión 6.5 o superior para PyGMT 0.19). En Linux suele bastar el gestor de paquetes del sistema; en macOS, Homebrew; en Windows, el instalador o el zip oficial de GMT. En Windows hay dos detalles más:

  • Define la variable de entorno GMT_LIBRARY_PATH con la carpeta bin de GMT, donde está gmt_w64.dll.
  • Agrega esa misma carpeta al PATH: ahí vive gswin64c.exe, el Ghostscript que GMT necesita para guardar imágenes. Sin él, savefig falla con Cannot execute Ghostscript.

Verificar la instalación

La función show_versions() es tu diagnóstico. Muestra la versión de PyGMT, la de GMT, la ruta de la biblioteca encontrada y si Ghostscript está disponible. Si algo falla más adelante, esta salida es lo primero que conviene revisar:

import pygmt

pygmt.show_versions()

Tu primer mapa

Todo dibujo empieza con un objeto Figure. Sobre él llamas métodos que agregan capas, como en una pila de acetatos. Tres parámetros aparecen en casi todas las llamadas: region (los límites oeste, este, sur y norte), projection (cómo se aplana la Tierra y el ancho del mapa) y frame (el marco con sus marcas):

import pygmt

fig = pygmt.Figure()
fig.coast(
    region=[-118, -86, 14, 33],   # oeste, este, sur, norte
    projection="M15c",            # Mercator de 15 cm de ancho
    land="gray",
    water="lightblue",
    borders="1/0.5p",             # fronteras nacionales
    frame=True,
)
fig.savefig("mexico.png")         # en un notebook también sirve fig.show()

Las líneas de costa y fronteras vienen de la base GSHHG, incluida con GMT. No necesitas descargar ningún archivo para este mapa.

Datos remotos con caché

GMT ofrece grillas globales listas para usar: relieve terrestre, edad del fondo oceánico, gravedad y más. PyGMT las carga con funciones como load_earth_relief. La primera vez se descargan del servidor de GMT y quedan guardadas en ~/.gmt/server; las siguientes veces se leen del disco:

import pygmt

grid = pygmt.datasets.load_earth_relief(
    resolution="10m", region=[-118, -86, 14, 33]
)
print(grid.shape)                    # (filas, columnas)
print(float(grid.min()), float(grid.max()))   # metros

La resolución manda en el tamaño: 01d (un grado) pesa muy poco, 10m unos megabytes y 15s llega a gigabytes para el mundo entero. Pide siempre la región que vas a usar, no el planeta.

Configuración global con pygmt.config

GMT tiene cientos de parámetros de estilo: tipo de marco, fuentes, formato de las coordenadas. pygmt.config los cambia; usado con with, el cambio solo dura dentro del bloque:

import pygmt

fig = pygmt.Figure()
with pygmt.config(MAP_FRAME_TYPE="plain", FONT_ANNOT_PRIMARY="9p",
                  FORMAT_GEO_MAP="ddd.x"):
    fig.basemap(region=[-118, -86, 14, 33], projection="M12c", frame="af")
fig.coast(land="gray", shorelines="0.3p")
fig.savefig("config.png")

Trampas comunes

  • Instalar solo con pip y olvidar GMT. El error Error loading GMT shared library significa que falta GMT o que Python no lo encuentra.
  • Mezclar canales de conda. Usa solo conda-forge; mezclar con defaults produce bibliotecas incompatibles.
  • Pedir grillas de alta resolución para regiones grandes. Empieza con 10m o 05m y sube solo si el mapa lo pide.
  • Confundir el orden de region. Es [oeste, este, sur, norte], no [lat, lon].

Cierre

Si show_versions() muestra GMT y Ghostscript, y el mapa de México se guarda sin errores, tu entorno está listo. Desde aquí, cada mapa del curso es la misma receta: una Figure, una región, una proyección y capas que se apilan.