Mapa de Granada con logos hexagonales de paquetes de R

Hace unos días tuvo lugar la reunión sobre R de carácter anual useR!, celebrada este año en Brisbane, Australia. Para la ocasión, crearon un mapa del país compuesto por logos de paquetes de R, que son de forma hexagonal.

Siguiendo las instrucciones de esta publicación en el blog de Mitchell O’Hara-Wild, me propuse hacer lo mismo para la provincia de Granada, donde resido y trabajo.

El código que encontrarás aquí es totalmente reproducible y adaptable para tu provincia.

La información geográfica está descargada del Instituto Geográfico Nacional, aunque también puedes usar el paquete raster como hicieron en la publicación original con Australia.

# Cargamos los paquetes iniciales
library(dplyr)
library(rgdal)
library(sp)
library(ggplot2)
library(sf)

# Leemos el .shp
provincias <- readOGR("lineas_limite/recintos_provinciales_inspire_peninbal_etrs89/recintos_provinciales_inspire_peninbal_etrs89.shp",
              use_iconv = TRUE,
              encoding = "UTF-8")

# Seleccionamos la provincia de interés
granada <- provincias %>% subset(NAMEUNIT == "Granada")

# Representamos el mapa seleccionado
ggplot() + geom_sf(data = st_as_sf(granada))

# Seleccionamos el tamaño de los hexágonos, que variará en función a:
#   - El tamaño del área que queramos cubrir
#   - El número de logos que queramos incluir
hex_points <- granada %>% spsample(type = "hexagonal", cellsize = .1)

# Aquí podemos ver cuántos hexágonos hay:
as_tibble(hex_points@coords)

# Especificamos de nuevo el tamaño de los hexágonos 
granada_hex <- HexPoints2SpatialPolygons(hex_points, dx = .1)

# Representamos el mapa original con los hexágonos superpuestos, para ver cómo quedaría:
ggplot() + 
  geom_sf(data = st_as_sf(granada)) + 
  geom_sf(data = st_as_sf(granada_hex), colour = "blue", fill = NA)

Si no te convence el resultado final, puedes volver a ejecutar la última caja de código para que se tome una muestra (ligeramente) distinta.

Para finalizar, usamos una función, hexwall, escrita por Mitchell O’Hara-Wild, y disponible en su GitHub. Puedes descargarte el script en .zip (Clone or download -> Download ZIP) y luego cargarlo en R usando source.

git

source("hexwall-master/hexwall.R")

Los parámetros de la función hexwall son simples:

Yo he seleccionado algunos logos de paquetes que uso a menudo, y el resultado, con ordenación aleatoria, es el siguiente:

hexwall(
  "samplehex",
  sticker_width = 200,
  coords = hex_points@coords,
  sort_mode = "random"
)

Y para terminar, os enseño cómo quedaría si ordenamos los stickers por color:

hexwall(
  "samplehex",
  sticker_width = 200,
  coords = hex_points@coords,
  sort_mode = "color"
)