Elaboración de mapas en RStudio

Esta es mi primera práctica publicada sobre análisis de datos en RStudio. En este post presentaré la elaboración de mapas para variables discretas y continuas con el paquete ggplot2. Además, se agregan colores con la paquetería Wes Anderson para darle un mejor atractivo estético al gráfico.

Aprovecho este pequeño espacio para compartir otro de mis sitios, mi blog, en el que quizá encuentres de interés algunas de mis reflexiones.

¿Para qué nos sirven los gráficos?

Seas nuevo o experimentado en RStudio, siempre es importante recordar lo básico. Hagamos un pequeño recordatorio de los gráficos en RStudio.

Los gráficos son representaciones visuales de los datos que nos son de mucha ayuda al momento de presentar la información y compartirla a un público de manera digerible, con datos ya tratados que facilite su interpretación.

Pueden utilizarse gráficos de barras, dispersión, diagramas de cajas y bigotes, entre muchos otros. Para esta práctica, revisaremos la elaboración de mapas temáticos como gráficos de bases de datos.

Datos

Los datos que se utilizaron para elaborar estos mapas se recuperan de la base de datos de VDEM, un proyecto que analiza casi 500 variables que influyen o refieren al estatus de la democracia en más de 180 países del mundo. Puedes revisar más información en su sitio aquí.

Utilizaremos dos datos, una variable discreta y una continua:

Variable Tipo
v2regsuploc (Apoyo al régimen) Discreta
Población (e_wb_pop) Continua

Para que podamos realizar un ejercicio sencillo, solo vamos a tomar 16 países entre los 5 continentes: Argentina, Chile, México, Colombia, Estados Unidos, Canadá, Alemania, Francia, Italia, Rusia, India, Japón, Egipto, Etiopía, Sudáfrica y Sudán. Además, lo limitaremos al año de 2018

Código

Este es el código que se utilizó para configurar los mapas.

options(warn=-1)
#--------------------------------------------------------------------------------
# Tema:       Mapas Temáticos
# Autor:      Ricardo Castillo
# Fecha:      14 febrero 2023
#--------------------------------------------------------------------------------

# Variables: Continua - e_wb_pop (Población)
# Variables: Nominal - v2regsuploc (Ubicación de apoyo al régimen)

# Preparar entorno de trabajo
rm(list=ls()); graphics.off(); options(warn=-1)              

# Cargar librerias
library(foreign); library(ggplot2); library(dplyr); library(tidyverse); library(sf); library(wesanderson)

# Directorio de trabajo

ruta="C:/Users/ricky/OneDrive/Escritorio/Ricardo/El Colegio de México/Sexto semestre/Programación/Archivos Rmd/"

setwd(paste(ruta,"/Datos", sep = ""))


# Base de datos asociada shape
world_vdem=read.dbf("World_Countries.dbf")

# Cargar la base de datos de V-Dem
vdem=read.csv("VDEM.csv")

#Seleccionar los datos en data frame

#Filtrar por año
vdem1 <- vdem %>% filter(year== 2018) %>% 
  select("country_name", "year", "v2regsuploc", "e_wb_pop")

#Selección de países
vdem2 <- vdem1 %>% filter(country_name=="Argentina" | country_name=="Chile" | 
                            country_name=="Mexico" | country_name=="Colombia" | 
                            country_name=="Germany" | country_name=="France" | 
                            country_name=="United States" | 
                            country_name=="Canada" | country_name=="Russia" | 
                            country_name=="Italy"  | country_name=="Egypt" | 
                            country_name=="Ethiopia" | country_name==
                            "South Africa" | country_name=="Sudan" | 
                            country_name=="India" | country_name=="Japan") %>% 
  select("country_name", "v2regsuploc", "e_wb_pop")

#Guardar CSV de los países seleccionados

#world_vdem=world_vdem%>%left_join(vdem2,
#                            by = c("COUNTRY" = "country_name"))
#write.dbf(world_vdem,"World_Countries.dbf")

#Cargamos el dbf nuevamente

#rm(world_vdem)
#world_vdem=read.dbf("World_Countries.dbf")

# Cargar shape
map=st_read("World_Countries.shp")
## Reading layer `World_Countries' from data source 
##   `C:\Users\ricky\OneDrive\Escritorio\Ricardo\El Colegio de México\Sexto semestre\Programación\Archivos Rmd\Datos\World_Countries.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 252 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -180 ymin: -90 xmax: 180 ymax: 83.6236
## Geodetic CRS:  WGS 84
# visualiza los datos del mapa para asegurarte de que tienes la variable "v2regsuplo"
#View(map)

Una vez configurados, podemos empezar con el mapa para la variable “v2regsuplo”. Como nuestro archivo dbf tiene más países que los que utilizaremos, arrojará NAs a todos esos datos omitidos. Como solución sencilla, podemos sustituir esos NAs por 0 para fines de la elaboración de los mapas.

#Mapas

#Sustituir NAs por "0"
map <- map %>% replace_na(list(v2regsuplo = 0, e_wb_pop = 0))

#Apoyo del régimen

palette <- wes_palette("Darjeeling2", type= "discrete", n=5) #Configuramos la paleta de Wesanderson

map %>%
  ggplot() +
  geom_sf(aes(fill = as.factor(v2regsuplo)), colour = "white", size = 0.07) +
  labs(title = "Región poblacional de mayor apoyo al régimen") +
  scale_fill_manual(values = palette, name= "Área de apoyo", labels = c ("No disponible", "Capital",
                                                  "Urbano", "Rural", "No específico")) +
  theme_bw()

Aquí es importante especificar que el color correspondiente a “No disponible” se refiere a todos esos números “0” que tenemos por utilizar solo algunos países de la base de datos. No hay que perder de vista este dato, pues en la escala de la variable también hay un nivel 0, que tomamos cuidado en tomar países que no lo tuvieran.

Por último, este es el mapa de la población para estos países

palette2 <- wes_palette("Royal1", type= "continuous")

ggplot() +
  geom_sf(data = map, aes(fill = e_wb_pop), color = "white", size = 0.2) +
  scale_fill_gradientn(colours = palette2, name = "Población", labels = scales::comma) +
  labs(title = "Población por país") +
  theme_bw()

Espero que este pequeño ejercicio de ejemplo haya sido de ayuda para la elaboración de sus mapas. ¡Mucha suerte!

  • Ri4