6.6 Creando mapas
Los mapas son una herramienta gráfica poderosa para la visualización de datos. Particularmente, para indicadores sociales-demográficos estos son una gran referencia visual para desagregaciones a nivel País, región, departamento, provincia, distrito, municipio, comuna, etc. R posee un sin fin de métodos de programación para representar dichos mapas.
Para graficar mapas es necesario contar con información geoespacial, datos que contienen las coordenadas o delimitaciones geográficas de determinado país o región. Sitios web como http://www.diva-gis.org/gdata ofrecen de manera gratuita bases de datos o shapes que contienen los vectores asociados a las geografías correspondientes.
Dichos conjuntos de datos poseen observaciones sobre la longitud y latitud lo cuál permite graficar en R un conjunto de puntos cuya unión en el gráfico formarán las formas los polígonos que dan forma a las áreas geográficas. Entre las distintas librería para realizar mapas en R están tmap y ggplot2. A continuación, se ilustra cómo se generan mapas, inicalmente con la librería tmap:
Inicialmente, para realizar el mapa hay que contar con el archivo de shepefile el cual se carga de la siguiente manera::
Una vez cargado el shape, el mapa se genera usando las funciones tm_shape y lo que se desea graficar en el mapa se incluye con la función tm_polygons. Para este ejemplo, solo grafiquemos las regiones en el mapa:
Si ahora el objetivo es graficar en las regiones el procentaje de probreza para hombres, inicialmente se debe agregar esa información a la base de datos con la que se graficará el mapa como sigue:
shape_temp <- tm_shape(
shapeBigCity %>% # shapefile
left_join( # Agregando una variable
prop_RegionH_Pobreza %>%
filter(pobreza == 1), # Filtrando el nivel de interés.
by = "Region"))Una vez generado la base de datos, se procede a crear el mapa. En este ejemplo, agregarán unos puntos de corte en el mapas que son definidos en el argumento brks como se muestra a continuación:
brks <- c(0, .2, .4, .6, 0.8, 1)
shape_temp + tm_polygons(
col = "prop",
breaks = brks,
title = "pobreza",
palette = "YlOrRd") A modo de otro ejemplo, se desea graficar ahora los coeficientes de variación de las estimaciones de los ingresos medios obtenidas por el diseño a nivel de región:
prom_region <- svyby(~Income, ~Region, diseno,
svymean,
na.rm = T, covmat = TRUE,
vartype = c("cv"))
prom_region## Region Income cv
## Norte Norte 552.4 0.10022
## Sur Sur 625.8 0.09973
## Centro Centro 650.8 0.09445
## Occidente Occidente 517.0 0.08940
## Oriente Oriente 541.8 0.13228
brks <- c(0, 0.2, 1)
shape_temp <- tm_shape(
shapeBigCity %>%
left_join(
prom_region,
by = "Region"))
shape_temp + tm_polygons(
"cv",
breaks = brks,
title = "cv",
palette = c("#FFFFFF", "#000000"),
) + tm_layout(asp = 0)
Ahora, realizar el mismo ejercicio anterior pero por zona y sexo:
prom_region_Sex <- diseno %>%
group_by(Region, Zone, Sex, pobreza) %>%
summarise(prop = survey_mean(vartype = "cv")) %>%
filter(pobreza == 1, Zone == "Rural", Sex == "Female")
shape_temp <- tm_shape(
shapeBigCity %>%
left_join(
prom_region_Sex,
by = "Region"))
shape_temp + tm_polygons(
"prop",
title = "Pobreza",
) + tm_layout(asp = 0)Como se comentó en la introducción de esta sección, los gráficos también se pueden hacer usando la librería ggplot2. Esta librería se apoya en las librerías biscale y cowplot. El procedimiento en R para hacer los mapas es muy similar al mostrado con la librería tmap y se realiza de la siguiente manera:
library(biscale)
library(cowplot)
temp_shape <- shapeBigCity %>%
left_join(
prom_region_Sex,
by = "Region")
k <- 3
datos.RM.bi <- bi_class(temp_shape,
y = prop, x = prop_cv, dim = k,
style = "fisher")
map.RM <- ggplot() +
geom_sf(
data = datos.RM.bi,
aes(fill = bi_class, geometry = geometry),
colour = "white", size = 0.1) +
bi_scale_fill(pal = "GrPink", dim = k) +
bi_theme() +
theme(legend.position = "none")
map.RMAhora, para crear la leyenda del mapa se hace de la siguiente manera:
legend1 <- bi_legend(
pal = "GrPink", dim = k,
xlab = "Coeficiente de variaci<U+00F3>n",
ylab = "Pobreza", size = 8)
mapa1 <- ggdraw() +
draw_plot(map.RM, 0, 0, 1, scale = 0.7) +
draw_plot(legend1, 0.75, 0.4, 0.2, 0.2, scale = 1) +
draw_text("Estimaciones directas de la pobreza en la mujer rural",
vjust = -13, size = 18)
mapa1