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.
¡Justo era lo que yo andaba buscando. El problema es que al menos a mí, no me deja descargar los datos de la pág. de SEGOB. No sé porqué 🥺.
— Héctor Rojas (@Elcursi_Rojas) February 16, 2023
Gracias por el "hack", sí pude descargarlo, PERO la verdad he intedo hacerlo con muchos tutoriales ya, y a la hora de intentar cargarlo me sale este error. Lo intenté con datos de la CDMX, de INEGI, y ahora con el que utilizas en tu post 🥹. El directorio de trabajo es correcto. pic.twitter.com/hsnBBXqaFd
— Héctor Rojas (@Elcursi_Rojas) February 16, 2023
¡No manches! Sí me salió así. Graaaacias. pic.twitter.com/NxKx8XAMRt
— Héctor Rojas (@Elcursi_Rojas) February 17, 2023
🙌🙌 Excelente. Voy a poner este hilo en el tutorial, por si la guía le sirve a alguien con un problema similar
— Hassel Fallas (@HasselFallas) February 17, 2023