Problema
Deseamos representar shapefiles (SHP) con ggplot2. Obtendremos los datos de las regiones administratitvas siguiendo los pasos de esta entrada.
Solución
Voy a representar los municipios de España. Generaré unos datos aleatorios para cada uno de ellos y asignarles luego una escala continua. Creo dos gráficos separados para península y Baleares, y Canarias para ganar en claridad. Finalmente represento Castilla-La Mancha, y dejo un enlace a un pdf para poder hacer zoom en el resto de la península y Baleares y apreciar el detalle.
library(tidyverse)
library(raster)
shp <- getData("GADM", country = "ES", level = 4)
shp.pen <- shp[shp@data$NAME_1 != "Islas Canarias", ]
shp.can <- shp[shp@data$NAME_1 == "Islas Canarias", ]
# Convertimos shapefiles a data frames
df.spain <- fortify(shp, region = "NAME_4")
df.pen <- fortify(shp.pen, region = "NAME_4")
df.can <- fortify(shp.can, region = "NAME_4")
# Datos aleatorios
set.seed(2015)
random.df <- data.frame(id = unique(df.spain[, 'id']),
random = runif(
n = length(unique(df.spain[, 'id'])),
min = 25,
max = 75
))
df.pen <-
merge(df.pen, random.df, by = 'id', all.x = TRUE)
df.can <-
merge(df.can, random.df, by = 'id', all.x = TRUE)
# Gráficos con ggplot2
# Península y Baleares
p.pen <-
ggplot(df.pen, aes(x = long, y = lat, group = group)) +
geom_polygon(aes(fill = random), colour = "white", size = 0.1) +
labs(x = " ", y = " ") +
theme_bw() +
scale_fill_viridis_c('Datos aleatorios', option = "magma", direction = -1) +
coord_map() +
theme(
panel.grid.minor = element_blank(),
panel.grid.major = element_blank(),
panel.border = element_blank(),
axis.ticks = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
legend.position = "bottom"
)
# Canarias
p.can <-
ggplot(df.can, aes(x = long, y = lat, group = group)) +
geom_polygon(aes(fill = random), colour = "white", size = 0.1) +
labs(x = " ", y = " ") +
theme_bw() +
scale_fill_viridis_c('Datos aleatorios', option = "magma", direction = -1) +
coord_map() +
theme(
panel.grid.minor = element_blank(),
panel.grid.major = element_blank(),
panel.border = element_blank(),
axis.ticks = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
legend.position = "bottom"
)
# Mostramos los gráficos
p.pen
p.can
Mapas
Enlace al pdf.
Entradas relacionadas
- Crear un mapa con Fusion Tables de Google
- Cambiar el orden de un diagrama de barras apiladas con ggplot2
- Generar un mapa de calor por días y horas con ggplot2
- Mapa de calor en forma de calendario en R
Referencias
No hay comentarios:
Publicar un comentario