8  Representación cartográfica

NoteResultados de aprendizaje
  • R4. Importar y manipular información espacial en R.

Ya sabemos manipular datos espaciales; ahora aprenderemos a comunicarlos a través de mapas. Veremos tres enfoques: ggplot2 (estático), tmap (cartográfico) y mapas dinámicos con mapview/leaflet.

install.packages(c("tmap", "ggspatial", "mapview", "leaflet"))
library(tidyverse)
library(sf)
library(tmap)
library(ggspatial)
comunas <- st_read("data/comunas_biobio.gpkg", quiet = TRUE)

8.1 Mapas rápidos con plot()

Para una mirada veloz, R base sirve:

plot(st_geometry(comunas), axes = TRUE)    # solo las geometrías

plot(comunas["provincia"])                  # coloreado por una variable

8.2 Mapas coropléticos con ggplot2

Un mapa coroplético colorea polígonos según una variable. Se logra mapeando fill dentro de aes():

ggplot(data = comunas) +
  geom_sf(aes(fill = provincia), color = "white", lwd = 0.3) +
  scale_fill_viridis_d(name = "Provincia", option = "C") +
  labs(
    title    = "Comunas de la Región del Biobío",
    subtitle = "Distribución por provincia",
    caption  = "Fuente: IDE Chile"
  ) +
  theme_void()

8.2.1 Encuadrar un área con coord_sf() y st_bbox()

Para hacer zoom a una zona, extraemos su bounding box (caja envolvente) y la pasamos a coord_sf():

bbox_com <- st_bbox(filter(comunas, provincia == "ARAUCO"))

ggplot(data = comunas) +
  geom_sf(aes(fill = provincia), color = "white", lwd = 0.2) +
  coord_sf(
    xlim = c(bbox_com$xmin, bbox_com$xmax),
    ylim = c(bbox_com$ymin, bbox_com$ymax)
  ) +
  scale_fill_viridis_d(option = "C") +
  theme_void()

8.2.2 Elementos cartográficos con ggspatial

Un mapa profesional necesita flecha de norte y barra de escala:

ggplot(data = comunas) +
  geom_sf(aes(fill = provincia), color = "white", lwd = 0.3) +
  scale_fill_viridis_d(option = "C") +
  theme_void() +
  annotation_north_arrow(location = "tl", which_north = "true",
                         style = north_arrow_minimal) +
  annotation_scale(location = "bl", width_hint = 0.5)

8.3 Mapas con tmap

tmap usa una sintaxis parecida a ggplot pero pensada específicamente para cartografía: tm_shape() define los datos y luego se suman capas:

tm_shape(comunas) +
  tm_polygons("provincia") +
  tm_compass(type = "8star", position = c("left", "top")) +
  tm_scalebar(position = c("left", "bottom")) +
  tm_credits("Fuente: IDE Chile", position = c("right", "bottom"))

8.4 Mapas dinámicos (interactivos)

Los mapas interactivos son ideales para explorar y para publicar en HTML. El código a continuación produce widgets navegables (se omite su ejecución aquí para mantener liviano el libro; ejecútalo en tu sesión de RStudio).

8.4.1 tmap en modo view

tmap_mode("view")     # activa el modo interactivo
tm_shape(comunas) + tm_polygons("provincia")
tmap_mode("plot")     # vuelve al modo estático

8.4.2 mapview

mapview es la forma más rápida de explorar datos espaciales:

library(mapview)

colegios <- st_read("data/colegios_biobio.gpkg") %>%
  filter(NOM_COM_RB == "CONCEPCIÓN")

mapview(filter(comunas, comuna == "CONCEPCION"), alpha = 0.1,
        layer.name = "Comuna Concepción") +
  mapview(colegios, zcol = "MAT_MUJ_TO", cex = "MAT_TOTAL",
          layer.name = "Matrículas de mujeres")

8.4.3 leaflet

leaflet ofrece el máximo control (es lo que usa mapview por debajo):

library(leaflet)

colegios_wgs <- st_transform(colegios, 4326)
pal <- colorNumeric("viridis", domain = colegios_wgs$MAT_MUJ_TO)

leaflet(colegios_wgs) %>%
  addTiles() %>%
  addCircleMarkers(
    radius      = ~ sqrt(MAT_TOTAL) / 2,
    color       = ~ pal(MAT_MUJ_TO),
    fillOpacity = 0.8, stroke = FALSE,
    popup       = ~ paste("Matrículas de mujeres:", MAT_MUJ_TO)
  ) %>%
  addLegend(pal = pal, values = ~MAT_MUJ_TO, title = "Matrículas mujeres") %>%
  addScaleBar()

Ejercicios

ImportantEjercicio 8.1 — Tres versiones de un mapa

Elige una variable de tus datos (por ejemplo, la matrícula total de los colegios, o un indicador comunal) y represéntala de tres formas:

  1. Un mapa coroplético estático con ggplot2, con flecha de norte y escala.
  2. El mismo mapa en tmap.
  3. Una versión interactiva con mapview o leaflet.

Compara: ¿para qué público o propósito sirve mejor cada uno?