Consejos para crear mapas de teledetección en R con leyendas claras

La leyenda dice «0.45678234» y nadie que no sea yo entiende qué significa ese número pegado a un cuadradito verde. Llevo un buen rato mirando el mismo mapa de teledetección abierto en RStudio, decidiendo si dejo la escala completa o la reduzco a tres palabras que cualquiera pueda leer: bosque, suelo, agua. Esa decisión, más que la programación en sí, es el verdadero corazón de la cartografía digital cuando se trabaja con R: no basta con que el raster cargue bien, hace falta que la visualización de datos le hable a quien la mire, no solo a quien la procesó.

Antes de quedarme con R para esto, probé instalar una versión de prueba de ArcGIS, confiando en que un software con nombre conocido me iba a resolver el problema de entrada. Expiró antes de que lograra sacar mi primer mapa completo, y con eso se fue también la idea de que bastaba con el programa correcto. Terminé aprendiendo por mi cuenta, sin formación en programación, a punta de mensajes de error que al principio no entendía y que ahora, la mayoría de las veces, sé leer sin que me tiemble la mano en el teclado.

La primera vez que encontré sola un error de proyección, sin nadie al lado que me lo señalara, el mensaje dejó de sonarme a chino, y ahí quedó claro que el sistema de coordenadas (lo que en R se conoce como CRS) no es un detalle técnico aparte: también le cambia la forma a la leyenda si uno lo pasa por alto.

El problema de las leyendas por defecto en la cartografía digital

Cuando alguien recién empieza a hacer mapas con el paquete terra en R, lo primero que aprende es a tirar un plot rápido para ver si la imagen cargó bien. El problema viene después: R es cuadriculado y científico, y por defecto pone en la leyenda todos los decimales que encuentra. Si estás trabajando con un índice de vegetación, te arma una escala continua con quince decimales innecesarios, y ahí una se da cuenta de que la consola está escupiendo un número que no le dice nada a un ser humano normal. Nadie necesita saber que un píxel tiene 0.45678234 de verdor, ni siquiera yo cuando reviso cómo va el bosque cerca de casa.

Comparación en pantalla de una leyenda continua con muchos decimales frente a una leyenda categórica simplificada en un mapa de teledetección en R

La solución no pasa solo por ajustar la paleta de colores: pasa por decidir, antes que nada, si ese mapa necesita la escala completa o si puede vivir con tres categorías. La función guide_colorbar de ggplot2 ayuda a limpiar el formato, pero el cambio real ocurre cuando se agrupan los valores continuos en clases discretas -con classify, del paquete terra- para que la leyenda diga "poco verde", "verde medio" y "muy verde" en lugar de un arcoíris de números. Ese paso, tan simple en apariencia, es una trampa típica de quien recién empieza: una cree que basta con cambiar los colores, y en realidad hay que cambiar la estructura de los datos que hay detrás de esos colores.

Lo mismo pasa en otros pasos del camino: cuando se recorta un raster con un shapefile, se puede terminar con una leyenda que muestra categorías que ya no existen dentro de esa área, y en un modelo de distribución de especies con Maxent aparece un problema parecido con las leyendas de probabilidad. Da lo mismo si el mapa viene de una banda espectral de Landsat o de un índice como el NDVI calculado sobre Sentinel-2: en algún punto hay que traducir esos números a algo que la gente entienda sin manual de por medio.

La misma leyenda no funciona para todos los lectores

Aldo, un lector que escribe desde Temuco y que puede desaparecer meses y reaparecer con una pregunta nueva como si no hubiera pasado el tiempo, me preguntó hace poco por qué yo insistía tanto en simplificar las leyendas. Él trabaja como guardaparque y necesita reportes de monitoreo forestal donde cada valor cuenta: ahí la escala continua, con todos sus decimales, no es un exceso, es información que alguien más va a usar para tomar una decisión sobre el bosque. Borrar los números, en ese caso, sería un error y no una mejora.

Marcia, mi compañera de oficina, vive el otro extremo. Cuando le mostré un mapa con la leyenda reducida a tres categorías -bosque, suelo, agua- soltó un grito de alegría como si hubiera ganado algo, y no necesitó que le explicara nada más. Ella no va a usar esos datos para ningún informe técnico: solo quiere entender, de un vistazo, si el bosque de su alrededor está creciendo o no. Para ese tipo de lectora, la escala completa no suma precisión, suma ruido.

Herramientas detrás de cada enfoque: paletas de color y tidyterra

El paquete tidyterra cambia bastante esta ecuación, porque actúa como puente entre el mundo más rígido de los rasters y la flexibilidad de ggplot2. Con geom_spatraster se pueden definir las etiquetas de la leyenda a mano: del 0 al 0.2 va "suelo", del 0.2 al 1.0 va "vegetación", y la leyenda aparece con palabras en vez de rangos. Terra y tidyterra son, hasta ahora, la combinación con la que más cómoda me siento para este trabajo, aunque sé que a otras personas les acomodan otras herramientas del ecosistema espacial de R.

Notas escritas a mano sobre paletas de colores viridis y magma para el diseño de leyendas en cartografía digital

Para los casos donde sí conviene mantener una escala continua -pensando en Aldo y sus reportes- las paletas viridis o magma ayudan a que la gradación se lea con claridad, y a que personas con daltonismo también puedan distinguir las diferencias, algo que una paleta arcoíris estándar no garantiza. Algo de esto lo desarrollé con más detalle en cómo calcular el índice de vegetación EVI en R paso a paso, donde esos rangos numéricos sí cumplen una función real y conviene dejarlos visibles en vez de simplificarlos.

Ese tipo de leyenda detallada tiene un costo: mientras más capas de color y más puntos de corte se agregan, más pesada se pone la imagen para procesar, sobre todo si el raster de origen ya viene grande. Más de una vez, por querer dejar una leyenda con muchos matices, terminé saturando la memoria de la laptop y perdí el avance a medio guardar; si eso les suena familiar, vale la pena revisar la solución a errores comunes al cargar rasters pesados en R antes de sumar más niveles de color de los que el equipo puede aguantar.

Elegir la leyenda según quién va a leer el mapa

La pregunta que más me sirve, antes de tocar un solo color, es simple: ¿quién va a mirar este mapa y para qué? Si la respuesta es alguien que va a usar esos valores para un informe, una comparación entre fechas o un modelo posterior -como Aldo con sus reportes de monitoreo-, la escala continua se queda, aunque tenga quince decimales. Si la respuesta es una vecina, una compañera de trabajo o cualquier persona que solo quiere entender el paisaje de un vistazo -como Marcia frente a la pantalla-, ahí conviene borrar los números y dejar tres o cuatro categorías con nombres simples. No existe una leyenda universalmente mejor: existe una leyenda que le sirve a quien la lee, y esa decisión pesa más que cualquier paleta que se elija después.

Cuando ya se decidió qué tipo de leyenda hace falta, el siguiente paso lógico es la clasificación misma de lo que aparece en la imagen, y ahí sirve revisar cómo hacer una clasificación de coberturas vegetales en R paso a paso, porque es en ese proceso donde se pone a prueba si las categorías elegidas tienen sentido sobre el territorio real y no solo en la pantalla.

Persona mostrando un mapa de teledetección hecho en R en una laptop durante una once familiar, con leyenda de colores clara

Le mostré este tipo de mapa simplificado a mi familia durante una once, y nadie preguntó qué significaban los números: ya no había números, había bosque, agua y suelo, y con eso alcanzó. Afuera seguía lloviendo, como casi siempre en esta parte del sur, y esa tarde quedó claro que la técnica es solo la mitad del trabajo. La otra mitad es saber a quién le estás hablando antes de elegir un solo color para la leyenda.

Artículos relacionados