Creación de mapas con R y ggplot2

R es el lenguaje por excelencia para el análisis estadístico y actualmente constituye una de las herramientas más populares para la generación de gráficos de gran calidad y complejidad.

En multitud de campos la mejor forma de mostrar los resultados suele ser la construcción de un mapa, de tal forma que podamos hacer accesible esta información a cualquiera con un solo vistazo.

Muchos paquetes y funciones para la generación de gráficos se apoyan en los motores gráficos base de R. Sin embargo, para ciertos gráficos avanzados se quedan cortos. En este post, siguiendo con la estrecha relación entre R y los SIG, mostraremos los pasos para construir mapas con R con un acabado profesional utilizando el paquete ggplot2.

¿Cómo se organizan los gráficos en R?

Antes de adentrarnos en el paquete ggplo2, es interesante conocer el funcionamiento del sistema de gráficos en R. Este sistema está formado por:

  1. Paquetes gráficos.
  2. Sistemas gráficos.
  3. Motor de dispositivos gráficos.
  4. Paquetes de dispositivos gráficos.
Gráfica obtenida del libro R Graphics de Paul Murrell

El núcleo funcional lo componen el motor de gráficos (grDevices) y los sistemas gráficos (graphics para gráficos tradicionales y grid para gráficos de malla o rejilla).

En otros lenguajes de programación la capacidad de construir gráficos la proporciona librerías adicionales ajenas al núcleo (como matplotlib para Python). En R contamos con graphics y grDevices ya integrados. En 2001, Paul Murrell desarrolló grid, otro sistema gráfico para facilitar la creación de gráficos de rejillas. El paquete grDevices permite modificar las fuentes, colores.. y da soporte a los dispositivos gráficos que permiten la exportación a varios formatos.

El sistema de gráficos tradicionales está formado por funciones del paquete graphics, mientras que el sistema de gráficos de rejilla lo componen funciones del paquete grid. Además, existen muchas librerías adicionales como ggplot2 o lattice que proporcionan acceso a funciones gráficas, pero todas se crean a partir de graphics o grid.

Primeros pasos para crear mapas con R

El paquete ggplot2 permite elaborar gráficos a partir de un proceso de acumulación de capas. Tiene cierto grado de complejidad, pero permite obtener resultados muy profesionales.

En este post vamos a generar mapas con R utilizando datos descargados de la Infraestructura de Datos Espaciales del Gobierno de La Rioja.

Instalación y carga de librerías

El primer paso, es instalar (si no se ha hecho ya) y cargar las librerías necesarias para trabajar:

ggplo2 no maneja datos espaciales específicamente. Por lo que utilizaremos las clases que proporcional el paquete sf para el tratamiento de los datos espaciales.

→ El soporte para clases sf está disponible desde la versión 3.0.0 de ggplot2.

Cargar datos espaciales en R

Antes de crear un gráfico con ggplot2, es necesario tener en nuestra sesión de R los datos que vayamos a utilizar para generar el mapa. Vamos a comenzar leyendo con la función st_read() del paquete sf dos archivos: uno con los municipios y otro con las carreteras de la provincia de La Rioja.

Es importante tener en cuenta que para que estos ficheros se lean correctamente deben estar situados en nuestro directorio de trabajo.

Creación de un mapa base básico con ggplot

Cada gráfica que generemos con ggplot2 tiene tres componentes clave:

  • Los datos que se van a graficar.
  • Características estéticas.
  • Al menos una capa que describe como representar los datos.

Para crear un gráfico que represente un mapa base de La Rioja es necesaria la combinación de los componentes nombrados. Si el fichero de datos cargado en el apartado anterior se ha leído correctamente y se ha convertido en un objeto sf, podremos hacerlo de la siguiente manera:

Esta llamada introduce muy bien la estructura de creación de un gráfico con el paquete ggplot2:

  • La primera parte ggplot(data = municipios) indica que los datos principales se almacenan en el objeto municipios.
  • La línea termina con un signo positivo +, que indica que la llamada aún no está completa, y cada línea que va a continuación corresponde a otra capa. El funcionamiento de ggplot2 consiste en concatenar llamadas a funciones hasta crear el mapa que deseemos.
  • Por último, usamos la función geom_sf, que sirve para agregar la geometría almacenada en un objeto sf

Proyecciones

Por defecto, el mapa toma el sistema de coordenadas de la primera capa que definimos. Si no hay ningún sistema de referencia de coordenadas definido, utiliza WGS84 (latitud/longitud, el sistema de referencia usado en el GPS).

La función coord_sf nos permite escoger otro sistema de coordenadas. Usando el argumento crs, es posible anular esta configuración y reproyectar los datos a cualquier proyección utilizando cualquier cadena PROJ4 válida:

Colores y bordes

Sin duda alguna, los colores de los objetos representados en un mapa tienen una importancia máxima. Podemos personalizar el color del relleno de todos los objetos y los bordes que incluyamos en nuestro mapa.

En este ejemplo, se genera un mapa dónde todos los elementos tienen el mismo color:

ggplot2 también permite el uso de paletas de color más complejas, como por ejemplo, generar un degradado en función de una variable de los datos.

Título, subtítulo, y etiquetas de los ejes

Para añadir más información al mapa, podemos agregarle un título, un subtítulo y las etiquetas de los ejes.

Para introducir un título y un subtítulo se emplea la función ggtitle. Mientras que las etiquetas de los ejes x  e y puede añadirse con la funciones xlab e ylab respectivamente.

Añadir más capas al mapa

Lo más normal es que tengamos que crear mapas con más capas de información. El procedimiento es el mismo que para añadir una capa, se emplea la función geom_sf cuando se quiere añadir objetos sf.

Los municipios nos sirven como fondo en la visualización de datos geoespaciales, pero podemos añadir más capas con mayor información, como por ejemplo las carreteras que hemos cargado al principio del post.

Flecha de norte y escala

El paquete ggplot2 no incluye funciones que permitan incorporar barras de escalas o flechas de norte. Para ello, debemos acceder a paquetes adicionales como ggspatial (https://github.com/paleolimbot/ggspatial).

Utilizando este paquete, las flechas del norte se agregan usando la función annotation_north_arrow(), y las barras de escala se pueden agregar usando annotation_scale().

Estas funciones “reconocen el espacio”, es decir, saben dónde está el norte y cuál es la distancia a través de la trama. Por lo tanto, solo tienen argumentos que permiten establecer su situación y aspecto dentro del mapa. Por ejemplo, el argumento location permite modificar la localización de la flecha o la barra dentro del gráfico. Sus posibles valores son:

  • tr (top right) que generará el objeto arriba a la derecha.
  • tl (top left) que generará el objeto arriba a la izquierda.
  • br (bottom right) que generará el objeto abajo a la derecha.
  • ….

Además, el argumento style permite escoger entre los estilos para las barras de escala y los estilos para las flechas del norte  disponibles. Para consultar más información sobre su personalización, se puede recurrir a la ayuda de R:

Ventajas de crear mapas con R frente a hacerlo con software GIS

Las soluciones más comunes para generar mapas involucran software GIS como QGIS o ArcMap. Y entonces, ¿qué ventajas nos ofrece R frente al software GIS para generar nuestros mapas? Algunas de ellas son:

  • R es un software libre, lo que lo hace accesible para todos.
  • Los elementos de un mapa se pueden agregar o eliminar con facilidad.
  • Podemos reutilizar código rápidamente para generar el mismo tipo de mapa pero con otros datos.
  • Podemos automatizar rápidamente la creación de multitud de mapas.
  • Tiene un lenguaje interactivo, estructuras de datos, disponibilidad de gráficos, una comunidad desarrollada y la ventaja de agregar más funcionalidades a través de un ecosistema enorme de paquetes.

Si quieres aprender a trabajar con R y utilizar sus capacidades estadísticas en el mundo geoespacial, inscríbete ya en nuestro curso online de R y SIG.

Let’s connect!

Date de alta en nuestro newsletter
y recibe este ebook gratuito

Y una vez al mes recibirás las últimas novedades del sector GIS y de nuestros cursos

2 comentarios en “Creación de mapas con R y ggplot2”

    • ¡Hola Jesús!
      Muchas gracias por tu comentario.

      Cuando no añades nada más, R automáticamente utiliza la rampa de color que se muestra en el ejemplo por defecto. Pero puedes modificar varios aspectos del código para escoger el resultado que tú quieras con los colores que desees. El paquete ggplot2 contiene una serie de funciones que te permiten establecer una escala de gradientes en función del tipo de objeto que vayas a representar en el mapa. Tienes funciones que te permiten escoger dos o más colores para crear un gradiente de escala.
      Por ejemplo usando scale_fill_continuous:

      ggplot(data = municipios) +
      geom_sf(aes(fill = area), color='black') +
      scale_fill_continuous(low = "#fff7ec", high = "#7F0000")

      Otras que permiten utilizar gradientes de colores ya estalecidos (scale_fill_gradient)

      ggplot(data = municipios) +
      geom_sf(aes(fill = area), color='black') +
      scale_fill_gradientn(colours = terrain.colors(10))

      Y además, también tienes otras funciones que te permiten usar paquetes muy conocidos de R para la generalización de paletas de colores como RBrewerColor o Viridis.

      Puedes consultar más información en el siguiente enlace: https://ggplot2.tidyverse.org/reference/scale_gradient.html

      Un saludo.

Deja un comentario