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.
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)
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)