En este tutorial veremos el potencial del paquete mapaRD
para graficar mapas coropléticos de República Dominicana.
Puedes encontrar el repositorio de este paquete en GitHub.
El paquete mapaRD
permite graficar mapas para distintas divisiones territoriales. Por el momento el paquete tiene completa
integración con las divisiones regionales, provinciales y municipales del territorio dominicano.
El objetivo del paquete es suministrar una función sencilla y poderosa que permita de manera succinta conectar datos a mapas.
El paquete tiene tres funciones principales: mapaRD()
, ggmapaRD()
, tabla_toponimia()
. Las primeras dos funciones tienen el mismo objetivo de graficar los mapas, y se distinguen en que mapaRD()
utiliza el motor gráfico nativo en R (y por tanto es más veloz), mientras que la función ggmapaRD()
utiliza el afamado paquete ggplot2
para generar los gráficos. Yo recomiendo fuertemente el uso de la última.
Para instalar este paquete, se requiere el paquete devtools
. Luego debe correr el siguiente código:
devtools::install_github("gcaff/mapaRD")
Para seguir los ejemplos de este documento, también debe tener cargados los paquetes ggplot2
y dplyr
:
library(ggplot2)
library(dplyr)
library(mapaRD)
Con esta función podemos graficar un mapa coroplético de República Dominicana.
En este ejemplo, quisiéramos ver un mapa que rellene cada región del país dependiendo de su población. Primero importemos los datos:
d <- read.csv("http://gcaff.github.io/data/RD/pob_region_rd.csv")
head(d)
## ID región x2010 x2011 x2012 x2013 x2014
## 1 10 Región Metropolitana 3351393 3413273 3474896 3537578 3598513
## 2 1 Región Cibao Norte 1522302 1532585 1542762 1553392 1563236
## 3 2 Región Cibao Sur 713303 715983 718607 721444 723916
## 4 3 Región Cibao Nordeste 626363 628355 630295 632430 634231
## 5 4 Región Cibao Noroeste 395424 397819 400199 402682 404966
## 6 5 Región Valdesia 1031736 1040105 1048388 1056996 1065059
Como pueden ver, estos datos contienen información poblacional, para los años 2010-2014, para cada región del país. Estos datos provienen de la Oficina Nacional de Estadística.
Las funciones de este paquete usan la variable “ID” (en mayúscula), para hacer la conexión entre las divisiones territoriales y la data. Por tanto, es importante que el data frame que pasemos en las funciones del paquete usen “ID” como identificador.
Ahora grafiquemos la población por región para el año 2010:
p1 <- mapaRD(d,"x2010",nivel="regional", idName = "ID2") %>%
title(main="Población por región, 2010")
p1
Los argumentos de la función mapaRD
son: el dataset d
, el nombre de la variable entre comillas "x2010"
, el nivel territorial que queremos graficar "regional"
, y el nombre de la columna identificadora, "ID2"
. Esta última variable es muy importante para hacer las conexiones entre las coordenadas en el gráfico y la data que estamos suministrando a la función. Este mecanismo es una posible solución al problema de falta de estandarización en los códigos identificadores del territorio dominicano. La otra opción para el argumento idiName
es "ID"
, que correspondería a la concatenación de los códigos de los niveles territoriales superiores al que está en cuestión. Para más información, ver la función tabla_toponimia()
.
La función ggmapaRD()
recibe exactamente los mismos argumentos que la función mapaRD()
, pero retorna un objeto ggplot
:
p2 <- ggmapaRD(d,"x2010",nivel="regional", idName = "ID2") +
ggtitle("Población por región, 2010")
p2
La ventaja de usar esta función es que permite toda la funcionalidad del universo ggplot2
, como el uso de temas, customización de los colores, etc.
Para cambiar el color del mapa podemos usar la función de ggplot2 scale_fill_gradient()
:
p2 +
scale_fill_gradient(low = "black", high = "red")
Para hacer un mapa a nivel provincial:
# descargamos datos del COVID-19 a la fecha
d <- read.csv("https://gcaff.github.io/covid-rd/data/covid_data_rd.csv")
#eliminamos la fila de no especificados
d <- d%>%
filter(provincia != "No especificado")
# seleccionar una fecha y renombrar la columna de codigos
dd <- d %>%
filter(fecha == "16/5/20") %>%
rename(ID=cod_prov)
# graficar
ggmapaRD(dd,"casos_acum",nivel="provincial", idName = "ID2") +
scale_fill_gradient(low = "white", high = "red") +
geom_polygon(alpha=0, color="black") + # agregar bordes a las fronteras
ggtitle("Casos Acumulados de COVID-19 al 16 de mayo del 2020")
Por defecto, la función ggmapaRD()
admite NAs preservando el mapa dominicano completo. Por ejemplo, digamos que queremos enfocarnos en el Gran Santo Domingo. Llamar la función produce el siguiente gráfico:
dd1 <- dd %>%
filter(ID %in% c(1,32)) # seleccionar solo el DN y SD
dd1 %>%
ggmapaRD("casos_acum",nivel="provincial", idName = "ID2") +
ggtitle("Casos Acumulados de COVID-19 al 16 de mayo del 2020")
Si quisiéramos excluir todos los valores NAs del mapa incluimos el argumento na.rm=TRUE
:
dd1 %>%
ggmapaRD("casos_acum",nivel="provincial", na.rm=TRUE, idName = "ID2") +
ggtitle("Casos Acumulados de COVID-19 en el Gran Santo Domingo,
al 16 de mayo del 2020")
Finalmente, para datos municipales, pasamos el argumento nivel="municipal"
a la función:
# generar datos aleatorios municipales
set.seed(12345)
d <- data.frame(ID=1:155,x=runif(155))
# graficar
d %>%
ggmapaRD("x",nivel="municipal", idName = "ID2")
La tercera función de este paquete, tabla_toponimia()
, sirve de guía para entender la relación entre los identificadores y los nombres de las divisiones territoriales. Por ejemplo, para saber cuáles son los códigos de las regiones del país:
tabla_toponimia("regional")
## REG TOPONIMIA ID ID2 NIVEL
## 1 01 REGIÓN CIBAO NORTE 01 1 REG
## 2 02 REGIÓN CIBAO SUR 02 2 REG
## 3 03 REGIÓN CIBAO NORDESTE 03 3 REG
## 4 04 REGIÓN CIBAO NOROESTE 04 4 REG
## 5 05 REGIÓN VALDESIA 05 5 REG
## 6 06 REGIÓN ENRIQUILLO 06 6 REG
## 7 07 REGIÓN EL VALLE 07 7 REG
## 8 08 REGIÓN YUMA 08 8 REG
## 9 09 REGIÓN HIGUAMO 09 9 REG
## 10 10 REGIÓN OZAMA O METROPOLITANA 10 10 REG