¿Quieres hacer mapas en R con archivos SHP? Sigue estos sencillos pasos

Picture of Hassel Fallas

Hassel Fallas

Analista de datos y periodista

Mapas, mapas, mapas. Por todas partes, hoy en día, los encontramos. ¿Por qué nos gustan tanto? Quizás porque, rápidamente, nos ayudan a encontrar patrones sobre un área o áreas geográficas en particular. Por esa razón, en este cuarto artículo sobre cómo usar la librería ggplot2 en R, me enfoco en los mapas, particularmente en los que podemos crear a partir de archivos SHP, «un formato sencillo que se utiliza para almacenar la ubicación geométrica y la información de atributos de las entidades geográficas. Las entidades geográficas de un shapefile se pueden representar por medio de puntos, líneas o polígonos (áreas)». Si quieres leer más sobre este tipo de archivos te recomiendo este artículo. 

Antes de iniciar, abajo hallarás algunos conceptos claves y los enlaces de las publicaciones anteriores de esta serie:

¿Qué es R? R es un entorno y lenguaje de programación con un enfoque al análisis estadístico

RStudio es un entorno de desarrollo integrado (IDE) para el lenguaje de programación R, dedicado a la computación estadística y gráficos

La librería ggplot2 de R es un sistema organizado de visualización de datos. Forma parte del conjunto de librerías llamado tidyverse. Fue creada por Hadley Wickham in 2005

¿Qué librerías necesitas cargar en R Studio antes de empezar?
				
					library(ggplot2) #Para hacer las gráficas
library(tidyverse) #un conjunto de paquetes para transformar y comunicar datos
library(sf) #Para representar los objetos geográficos como objetos nativos de R en listas, matrices o vectores
library(ggspatial) #Una versión de ggplot para añadir fondos a mapas
				
			
Paso #1. ¿Cómo se ven los archivos descargados?

Una vez que descomprimas el zip con los datos, verás una lista de archivos igual a esta 

Coloca la carpeta descomprimida dentro de tu repositorio de R y define tu directorio de trabajo para acceder a tus archivo. Por ejemplo, en mi caso:

				
					getwd()
setwd(C:/Users/Hassel/Documents/Repositorio/Mapas")
				
			
Paso #2. Lee el archivo SHP
				
					capa1 <- st_read("spt1mgw.shp")
				
			

En tu consola verás algo como esto:

Paso #3. Creamos una nueva variable de identificación numérica para los tres tipos de prioridad de biodiversidad
				
					capa1 = mutate(capa1, Prioridad=PRIORIDAD, 
                    Prioridad = case_when(Prioridad == "alta" ~ "2",
                                                      Prioridad == "media" ~ "3",
                                                      Prioridad == "extrema" ~ "1"))

				
			
				
					#Luego removeremos los vacíos de datos dentro de la nueva variable: Prioridad
#Guardaremos los cambios en un nuevo dataframe

capa2 <-capa1 %>% 
  filter(!is.na(Prioridad ))
				
			
Paso #4. La primera versión sencilla del mapa
				
					capa2 %>%
  ggplot() +
  annotation_map_tile(type = "cartolight", zoomin = 0) +
  geom_sf(aes(geometry=geometry,color = PRIORIDAD, fill=PRIORIDAD ))

capa2
				
			
Resultado:
Paso #5. Ahora mejoremos la visualización del mapa añadiendo un tema «vacío» y colocando la leyenda en la parte inferior del mapa
				
					capa2 %>%
  ggplot() +
  annotation_map_tile(type = "cartolight", zoomin = 0) +
  geom_sf(aes(geometry=geometry,color = PRIORIDAD, fill=PRIORIDAD ), alpha = 0.7, size=1) +
  theme_void()+
  theme(legend.position="bottom")

capa2
				
			
Resultado:
Paso #6. Añadamos una capa de fondo de Open Street Map, en este caso la «osm», como puedes ver en la línea 3
				
					capa2 %>%
  ggplot() +
  annotation_map_tile(type = "osm", zoomin = 0) +
  geom_sf(aes(geometry=geometry,color = PRIORIDAD, fill=PRIORIDAD ), alpha = 0.7, size=1) +
  theme_void()+
  theme(legend.position="bottom")
				
			
Resultado:

Si quieres probar con otra capa, acá te dejo la lista de opciones. 

				
					#CAPAS DE FONDO
#[1] "osm"                    "opencycle"             
##  [3] "hotstyle"               "loviniahike"           
##  [5] "loviniacycle"           "hikebike"              
##  [7] "hillshade"              "osmgrayscale"          
##  [9] "stamenbw"               "stamenwatercolor"      
## [11] "osmtransport"           "thunderforestlandscape"
## [13] "thunderforestoutdoors"  "cartodark"             
## [15] "cartolight"
				
			
Paso #7. Añadamos leyendas, una paleta propia de color y refinemos la versión final del mapa
				
					capa2 %>%
  ggplot() +
  annotation_map_tile(type = "cartolight", zoomin = 0) +
  geom_sf(aes(geometry=geometry,color = PRIORIDAD, fill=PRIORIDAD ), alpha = 0.7, size=1) +
  theme_void()+
  theme(legend.position="bottom")+
  theme(plot.title = element_text(size = 20, face= "bold"),
        plot.subtitle = element_text(size = 12, face = "italic", margin=margin(0,0,30,0)),
        plot.caption = element_text(size = 10, face = "italic"))+ 
  scale_color_manual(labels = c("Extrema", "Alta", "Media"), values = c("#E65649", "#366499", "#369995"))+
  scale_fill_manual(labels = c("Extrema", "Alta", "Media"), values = c("#E65649", "#366499", "#369995"))+
  labs(title = "Sitios prioritarios terrestres para la conservación \n de la biodiversidad en México",
       subtitle = "El país alberga el 12% de los organismos vivos del planeta.", 
       caption = "Fuente: Comisión Nacional para el Conocimiento y Uso de la Biodiversidad. Hecho por:HasselFallas")

				
			
Resultado:

Espero que este ejercicio te haya sido útil. Si deseas leer más sobre temas de visualización y análisis de datos, te recomiendo estos artículos: 

¿Problemas para cargar los datos? En este hilo, puedes leer una solución.
error: No se puede descargar