Introducción

Una de las ventajas de R es que también nos permite trabajar con datos geoespaciales, los cuales son conocidos como shapefiles. Existen una diversidad de pÔginas para conseguir shapefiles. Personalmente, opto por usar la pÔgina GEO GPS PERU para conseguir datos geoespaciales del territorio peruano. Esta pÔgina contiene datos geoespaciales por límite departamental, provincial y distrital. Para este ejemplo, se descargó el shapefile por límite departamental. Se descarga un archivo comprimido que contiene distintas extensiones tal como se muestra en la siguiente figura.

Guardamos todo esto en nuestra dirección de trabajo.

Paquetes necesarios

Los paquetes requeridos para poder hacer mapas en R son, bÔsicamente, los que se presentan a continuación.

library(sf)
library(purrr)
library(tidyverse)
library(ggplot2)
library(ggrepel)

Creación de mapas

R nos permite leer los datos geoespaciales y tratarlos como un data frame, lo cual es conveniente para poder hacer mapas y agregar distintas capas como rellenos, leyendas, títulos, etc. El mapa mÔs bÔsico que podemos hacer es el que contiene solo las líneas fronterizas. Luego, podriamos agregar otras variables de interés que podrían ser presentadas usando un mapa. El objetivo de esta guía es elaborar un mapa que muestre el porcentaje de personas en condición de pobreza por departamentos.

library(sf)
## Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
library(purrr)
library(tidyverse)
## -- Attaching packages ---------------------------------------------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.0     v dplyr   0.8.5
## v tibble  3.0.1     v stringr 1.4.0
## v tidyr   1.1.0     v forcats 0.5.0
## v readr   1.3.1
## -- Conflicts ------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(ggplot2)
library(ggrepel)
library(readxl)

dirmapas <- "C:/Users/usuario/Desktop/Datos HP i5/R scripts/Mapas/departamentos" #La dirección de tu directorio de trabajo
setwd(dirmapas)
peru_d <- st_read("DEPARTAMENTOS.shp") #Este comando permite leer el shapefile y 'transformarlo' en un data frame
## Reading layer `DEPARTAMENTOS' from data source `C:\Users\usuario\Desktop\Datos HP i5\R scripts\Mapas\departamentos\DEPARTAMENTOS.shp' using driver `ESRI Shapefile'
## Simple feature collection with 25 features and 4 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: -81.32823 ymin: -18.35093 xmax: -68.65228 ymax: -0.03860597
## geographic CRS: WGS 84
peru_d # Una muestra de como luce nuestra base de datos
## Simple feature collection with 25 features and 4 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: -81.32823 ymin: -18.35093 xmax: -68.65228 ymax: -0.03860597
## geographic CRS: WGS 84
## First 10 features:
##    IDDPTO   DEPARTAMEN      CAPITAL FUENTE                       geometry
## 1      01     AMAZONAS  CHACHAPOYAS   INEI MULTIPOLYGON (((-77.81211 -...
## 2      02       ANCASH       HUARAZ   INEI MULTIPOLYGON (((-77.64692 -...
## 3      03     APURIMAC      ABANCAY   INEI MULTIPOLYGON (((-73.74632 -...
## 4      04     AREQUIPA     AREQUIPA   INEI MULTIPOLYGON (((-71.98109 -...
## 5      05     AYACUCHO     AYACUCHO   INEI MULTIPOLYGON (((-74.34843 -...
## 6      06    CAJAMARCA    CAJAMARCA   INEI MULTIPOLYGON (((-78.70034 -...
## 7      07       CALLAO       CALLAO   INEI MULTIPOLYGON (((-77.13521 -...
## 8      08        CUSCO        CUSCO   INEI MULTIPOLYGON (((-72.9728 -1...
## 9      09 HUANCAVELICA HUANCAVELICA   INEI MULTIPOLYGON (((-74.57118 -...
## 10     10      HUANUCO      HUANUCO   INEI MULTIPOLYGON (((-76.00486 -...
#Primer mapa: solo muestra los lĆ­mites departamentales
ggplot(data = peru_d) +
  geom_sf()

#Graficar solo un departamento: graficaremos Arequipa
ggplot(data = peru_d %>%
       filter(DEPARTAMEN=="AREQUIPA")) +
  geom_sf()

#Centroides: Podemos crear un punto al centro de cada unidad, lo cual nos permitirĆ” colocar el nombre de cada departamento

#Se crea el centroide
peru_d <- peru_d %>% mutate(centroid = map(geometry, st_centroid), coords = map(centroid, 
                                                                                        st_coordinates), coords_x = map_dbl(coords, 1), coords_y = map_dbl(coords, 
                                                                                                                                                           2))

#Mapa con etiquetas de departamentos
ggplot(data = peru_d) +
  geom_sf(fill="skyblue", color="black")+ #Se le agrega un relleno celeste y bordes negros
  geom_text_repel(mapping = aes(coords_x, coords_y, label = DEPARTAMEN), size = 2.25) #Se inserta el nombre de cada departamento

##  Entrada de datos
# Usaremos los datos obtenidos de la Encuesta Nacional de Hogares (2018) para graficar un mapa del PerĆŗ por departamentos que muestre el porcentaje de personas pobres.
pobreza <- read_excel("C:/Users/usuario/Desktop/Datos HP i5/R scripts/Mapas/pobreza.xlsx")
pobreza #La base de datos con la que haremos un 'merge' con el dataframe que tiene los datos geoespaciales.
## # A tibble: 25 x 2
##    DEPARTAMEN   pobres
##    <chr>         <dbl>
##  1 AMAZONAS     0.335 
##  2 ANCASH       0.203 
##  3 APURIMAC     0.318 
##  4 AREQUIPA     0.0858
##  5 AYACUCHO     0.375 
##  6 CAJAMARCA    0.419 
##  7 CALLAO       0.160 
##  8 CUSCO        0.229 
##  9 HUANCAVELICA 0.387 
## 10 HUANUCO      0.299 
## # ... with 15 more rows
#Debemos fijarnos que la variable 'llave' debe estar escrita igual en las bases de datos que se juntarƔn.
#En este caso "DEPARTAMEN" es la variable llave. AdemÔs, el nombre de todos lo departamentos debe ser el mismo: deben respetar mayúsculas, minúsculas, tildes, etc.

peru_datos <- peru_d %>% #Juntamos ambas bases de datos
  left_join(pobreza)
## Joining, by = "DEPARTAMEN"
# Mapa final
#Sin etiquetas de departamentos
ggplot(peru_datos) +
  geom_sf(aes(fill = pobres))+
  labs(title = "Porcentaje de población pobre por departamento (2018)",
       caption = "Fuente: Enaho (2018)
       Elaboración propia",
        x="Longitud",
       y="Latitud")+
  scale_fill_continuous(guide_legend(title = "Incidencia de la pobreza"))

#Con etiquetas de departamentos
ggplot(peru_datos) +
  geom_sf(aes(fill = pobres))+
  labs(title = "Porcentaje de población pobre por departamento (2018)",
       caption = "Fuente: Enaho (2018)
       Elaboración propia",
        x="Longitud",
       y="Latitud")+
  scale_fill_continuous(guide_legend(title = "Incidencia de la pobreza"))+
  geom_text_repel(mapping = aes(coords_x, coords_y, label = DEPARTAMEN), size = 2.25)