install.packages(c("tmap", "ggspatial", "mapview", "leaflet"))8 Representación cartográfica
- 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.
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ático8.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
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:
- Un mapa coroplético estático con
ggplot2, con flecha de norte y escala. - El mismo mapa en
tmap. - Una versión interactiva con
mapviewoleaflet.
Compara: ¿para qué público o propósito sirve mejor cada uno?