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.
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)
Los aeropuertos están marcados con cruces rojas mientras que las localizaciones deseadas para las burbujas (los centroides) se representan eh azul.
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.
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")
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.
# 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