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

Afuera está cayendo un diluvio de esos que solo se ven acá en Valdivia, donde el cielo parece que se fuera a desarmar sobre los techos de zinc, y yo estoy acá, con mi mantita y el mate, mirando fijamente la pantalla de la laptop. No sé si les ha pasado, pero a veces paso horas peleando con una proyección o tratando de que un raster no me tire error, y cuando por fin sale el mapa, la leyenda es un desastre total que nadie entiende. El otro día, en una tarde de tormenta en junio, vino un vecino, Don Pedro, a pedirme unos huevos de campo y se asomó a ver qué estaba haciendo; le mostré un mapa de cambio de bosque que me había tomado todo el fin de semana y el pobre hombre puso una cara de confusión que me dio hasta vergüenza. Me preguntó por qué había una barrita con números del 0.0000001 al 0.8999999 y qué significaba ese degradado de verdes que, para él, se veía todo igual. Ahí me di cuenta: de nada sirve procesar gigas de información satelital si al final el que mira el mapa se siente como si estuviera leyendo jeroglíficos.

El problema de las leyendas que vienen por defecto

Cuando una empieza en esto de la teledetección con R, lo primero que aprende es a cargar el paquete terra y a tirar un plot rápido para ver si la imagen cargó bien. El tema es que R es muy científico, muy cuadradito, y por defecto te pone todo lo que encuentra. Si estás trabajando con un índice de vegetación, te planta una leyenda continua con una escala que tiene como quince decimales innecesarios. Es frustrante, porque mientras escuchas el sonido rítmico de la lluvia sobre el techo de zinc, te das cuenta de que tu consola de R te está escupiendo una leyenda que no le dice nada a un ser humano normal. ¿Quién necesita saber que un píxel tiene 0.45678234 de 'verdor'? Nadie, ni siquiera yo cuando trato de ver cómo va el bosque nativo detrás de mi casa.

Durante las vacaciones de verano, cuando tuve un poco más de tiempo para sentarme a estudiar sin la presión de la oficina, me puse a investigar cómo mejorar esto. El gran error que cometía al principio era usar ggplot2 tal cual, sin ajustar las guías. La función guide_colorbar es clave aquí, pero el verdadero secreto que aprendí a punta de caídas es que, en teledetección, menos es casi siempre más. Si el mapa es para mostrarle a la comunidad o para tu propio registro de cómo cambia el paisaje, no necesitas esa escala infinita. Necesitas que la gente vea 'Bosque', 'Suelo desnudo' o 'Agua', no un gradiente de colores que se confunde con el reflejo de la ventana.

Comparación en pantalla de una leyenda de mapa compleja frente a una simplificada en R.

Hablando en el idioma del territorio (y de R)

Una de las cosas que más me costó entender fue el tema de los sistemas de coordenadas. Como yo vivo en Valdivia, casi todo lo que proceso lo tengo que pasar a la proyección EPSG: 32718, que es la que corresponde a la zona 18S de UTM. Al principio, ni siquiera sabía que las leyendas también se ven afectadas por cómo proyectas los datos. Si proyectas mal, las distancias y las áreas en la leyenda pueden salir cualquier cosa. Y entonces, ahí estás tú, tratando de explicar un mapa de Landsat 8, usando específicamente la Band 4 (que es la del rojo, entre los 640-670 nanómetros), y resulta que tu leyenda dice que el área protegida mide la mitad de lo que realmente mide. Es un lío.

Varios fines de semana seguidos me dediqué solo a entender cómo transformar esos datos continuos que nos dan los satélites en algo 'discreto'. O sea, en categorías. Porque seamos honestas, si estás mirando una imagen de Sentinel-2 con su resolución espacial de 10 metros, lo que quieres es distinguir objetos claros. No sirve de nada que la leyenda sea un arcoíris si no puedes decir 'este cuadrado verde oscuro es un arrayán'. Para eso, empecé a usar funciones de corte (como classify en el paquete terra) para agrupar los valores. En vez de tener mil tonos de verde, tengo tres: poco verde, verde medio y muy verde. Suena simple, pero para alguien que no es programadora, lograr que ese código corra sin errores es como ganar un pequeño mundial personal.

La clave está en simplificar los rangos de datos

Hace unas tres semanas, mi mamá vino a tomar once y le mostré un mapa de índice de vegetación en el que estaba trabajando. Cometí el error de dejar los valores originales. Ella se quedó mirando la pantalla un buen rato y me preguntó, con toda la sinceridad del mundo, por qué el 'verde' tenía números negativos. ¡Me quería morir! Explicarle que los valores negativos suelen ser agua o nieve es un camino largo cuando solo quieres mostrarle que el bosque está creciendo. Esa fue mi 'inner truth': si mi mamá no lo entiende, el mapa no está cumpliendo su función. La teledetección no debería ser un club secreto de gente que habla en nanómetros.

Para solucionar esto, aprendí que lo mejor es usar paletas de colores que ya estén pensadas para ser legibles, como Viridis o Magma. No solo son bonitas, sino que ayudan a que personas con daltonismo puedan ver las diferencias. Pero el consejo de oro que les doy, de aprendiz a aprendiz, es que eviten las leyendas estándar de R. A veces es mejor no poner números en absoluto si el mapa es cualitativo. Si usas colores muy intuitivos (azul para el agua, café para la tierra, verde para el bosque), la gente entiende mucho más rápido que si le pones una escala del 0 al 1. Si te interesa profundizar en cómo llegamos a esos valores, hace un tiempo escribí sobre cómo calcular el índice de vegetación EVI en R paso a paso, donde justamente peleé con estos mismos rangos.

Notas escritas a mano sobre paletas de colores y diseño de leyendas para mapas.

Usando tidyterra para que todo sea más amable

Si hay algo que me cambió la vida (bueno, mi vida de fin de semana frente a la compu) fue descubrir el paquete tidyterra. Es como un puente entre el mundo rudo de los rasters y la amabilidad de ggplot2. Con este paquete, puedes usar geom_spatraster_cols y definir las etiquetas de la leyenda de una forma mucho más manual y cariñosa. En vez de que R decida qué números poner, tú le dices: 'mira, del 0 al 0.2 ponme Suelo, y del 0.2 al 1.0 ponme Vegetación'. Y listo, la leyenda aparece con palabras que los humanos usamos.

A veces me desvío un poco cuando estoy programando porque me quedo mirando los pájaros que llegan al jardín o me acuerdo de que tengo que entrar la leña antes de que se moje más, y ahí es cuando cometo los errores más tontos, como olvidarme de un paréntesis. Pero lo bueno de R es que, aunque sea un poco gritón con los mensajes de error en rojo, te obliga a ser ordenada. Si alguna vez te sientes superada por el tamaño de las imágenes, te recomiendo leer sobre la solución a errores comunes al cargar rasters pesados en R, porque a mí me pasaba que por querer hacer una leyenda linda, terminaba saturando la memoria de la laptop y se me cerraba todo.

Reflexiones desde mi escritorio lluvioso

Al final del día, crear un mapa es como contar una historia. Yo no soy geógrafa, soy solo alguien que quiere ver cómo cambia su entorno desde arriba, y he aprendido que la técnica es solo la mitad del camino. La otra mitad es la comunicación. Un mapa de teledetección no es solo para científicos encerrados en un laboratorio; es una herramienta visual que debe contar una historia clara sobre el territorio, ya sea para denunciar una tala ilegal o para maravillarse con la recuperación de un humedal tras el verano.

Para ir cerrando, que ya se me enfrió el mate y el viento está golpeando fuerte la ventana, les diría que no le tengan miedo a borrar los números de sus leyendas si estos no aportan nada. Prueben, equíquense, y vuelvan a probar. Yo todavía me trabo a veces, pero cada vez que logro que alguien vea un mapa mío y diga 'ah, entiendo perfectamente qué pasó aquí', siento que todo el esfuerzo de aprender código desde cero valió la pena. Si están en ese proceso de clasificar lo que ven en sus imágenes, quizás les sirva ver cómo hacer una clasificación de coberturas vegetales en R paso a paso, que es donde realmente ponemos a prueba si nuestras leyendas funcionan o no.

Persona mostrando un mapa satelital en una laptop durante una once familiar.

Espero que estos consejitos, nacidos de la frustración y de muchas tardes de café y lluvia, les sirvan para que sus mapas brillen. No se rindan con R; es un poco mañoso, como el clima de Valdivia, pero cuando sale el sol (o cuando el código corre), la vista es hermosa.

Artículos relacionados