Un mapa de burbujas usa símbolos proporcionales para representar cómo una variable varía sobre diferentes áreas geográficas. El símbolo usado es por lo general un círculo, cuyo diámetro depende del valor de la variable de interés.

Para este tutorial vamos a usar los datos proporcionados en formato sf por el paquete giscoR. Los datos usados serán usados serán el número de aeropuertos para cada país de la Unión Europea en el año 2013.

Extracción de datos

Para obtener los datos de giscoR podemos usar la función gisco_get_countries y especificar la región deseada con el argumento region. Los centroides para cada país (la localización deseada para los símbolos) se pueden calcular con la función st_centroid y los aeropuertos se pueden obtener con la función gisco_get_airports del paquete.

# install.packages("sf")
# install.packages("dplyr")
# install.packages("giscoR")

library(giscoR)
library(dplyr)
library(sf)

# CRS
codigo_epsg <- 3035

# Países
paises_UE <- gisco_get_countries(region = "EU") %>%
  st_transform(codigo_epsg)

# Centroides para cada país
pos_simbolos <- st_centroid(paises_UE, of_largest_polygon = TRUE)

# Aeropuertos
aeropuertos <- gisco_get_airports(country = paises_UE$ISO3_CODE) %>%
  st_transform(codigo_epsg)

Cuando se trabaja con datos espaciales, todas las formas deberían representar el mismo Sistema de Coordenadas de Referencia (CRS, por sus siglas en inglés). En este ejemplo hemos seleccionado ETRS89-extended / LAEA Europe (EPSG code: 3035) como el CRS a ser usado en nuestra visualización.

Con los datos obtenidos antes podemos crear un mapa sencillo con la función plot. Ten en cuenta que tendrás que aplicar la función st_geometry a los objetos sf.

Aeropuertos y centroides

# Plot
plot(st_geometry(paises_UE),
     xlim = c(2200000, 7150000), # Recortar el mapa
     ylim = c(1380000, 5500000))

# Aeropuertos
plot(st_geometry(aeropuertos), pch = 3,
     cex = 1, col = "red", add = TRUE)

# Posición de las etiquetas
plot(st_geometry(pos_simbolos), pch = 20,
     col = "blue", add = TRUE)

Mapa de aeropuertos en Europa

Los aeropuertos están marcados con cruces rojas mientras que las localizaciones deseadas para las burbujas (los centroides) se representan eh azul.

Manipulación de datos

Tras obtener los datos necesitamos unir el número de aeropuertos por país con el objeto pos_simbolos. Para ello, primero extraemos el data frame de aeropuertos usando la función st_drop_geometry():

numero_aeropuertos <- aeropuertos %>%
  st_drop_geometry() %>%
  group_by(CNTR_CODE) %>%
  summarise(n = n())

Ahora podemos unir el conjunto de datos agregado a pos_simbolos:

etiquetas_n <-
  pos_simbolos %>%
  left_join(numero_aeropuertos,
            by = c("CNTR_ID" = "CNTR_CODE")) %>%
  arrange(desc(n))

Ten en cuenta que los puntos se dibujarán en orden, por lo que es una buena práctica ordenar las filas del objeto espacial en orden descendiente, de modo que las burbujas más grandes se mostrarán debajo de las pequeñas, evitando ocultarlas.

Mapa de símbolos proporcionales básico

Dados los datos anteriores podemos crear ahora un mapa de burbujas en R base. Ten en cuenta que hemos usado círculos como símbolo (pch = 21), pero podrías usar cualquier otro símbolo pch, como cuadrados, cruces o triángulos.

# Reescalamos los tamaños con log
etiquetas_n$size <- log(etiquetas_n$n / 15)

plot(st_geometry(paises_UE),
     main = "Aeropuertos por país (2013)",
     sub = "Eurostat, © EuroGeographics para los límites administrativos",
     col = "white", border = 1,
     xlim = c(2200000, 7150000),
     ylim = c(1380000, 5500000))

plot(st_geometry(etiquetas_n),
     pch = 21, bg = 4,       # Tipo y color de símbolo
     col = 4,                # Color de borde del símbolo
     cex = etiquetas_n$size, # Tamaño de los símbolos
     add = TRUE)

legend("right",
       xjust = 1,
       y.intersp = 1.3,
       bty = "n",
       legend = seq(100, 500, 100),
       col = "grey20",
       pt.bg = 4,
       pt.cex = log(seq(100, 500, 100) / 15),
       pch = 21,
       title = "Aeropuertos")

Mapa de burbujas en R

Mapa de coropletas y burbujas

Es posible combinar un mapa de coropletas y un mapa de burbujas, coloreando las burbujas en base a los valores que toma la variable de interés, haciendo que el mapa sea más fácil de leer.

Mapa de coropletas combinado con mapa de burbujas en R

# Paleta de colores
pal_init <- hcl.colors(5, "Temps", alpha = 0.8)
pal_ramp <- colorRampPalette(pal_init)

plot(st_geometry(paises_UE),
     col = "grey95",
     main = "Aeropuertos por país (2013)",
     sub = "Eurostat, © EuroGeographics para los límites administrativos",
     xlim = c(2200000, 7150000),
     ylim = c(1380000, 5500000))

plot(etiquetas_n[, "n"],
     pch = 19, 
     cex = etiquetas_n$size, # Tamaño de los símbolos
     pal = pal_ramp,         # Paleta de colores
     add = TRUE)

legend("right",
       xjust = 1,
       x.intersp = 1.3,
       y.intersp = 2,
       legend = seq(100, 500, 100),
       bty = "n",
       col = "grey30",
       pt.bg = pal_init,
       pt.cex = log(seq(100, 500, 100) / 15),
       pch = 21,
       title = "")

También te puede interesar