7.5 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::

library(sf)
library(tmap)
shapeBigCity <- read_sf("Data/shapeBigCity/BigCity.shp")

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:

tm_shape(shapeBigCity) + 
  tm_polygons(col = "Region") 

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.1002
Sur Sur 625.8 0.0997
Centro Centro 650.8 0.0945
Occidente Occidente 517.0 0.0894
Oriente Oriente 541.8 0.1323
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.RM

Ahora, 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