Los gráficos de tarta o pie charts tienen algunos peligros y el ahora escribiente no es muy partidario de su uso; sin embargo, la librería scatterpie facilita mucho su realización en R y quería traer al blog un método más o menos sencillo para entender cómo hacer el gráfico y cómo disponer los datos.

Obtención del mapa

Se comienza por obtener un mapa por comunidades autónomas con raster que a los seguidores de los artículos de R del blog les será familiar:

library(scatterpie)
library(tidyverse)
library(raster)

# Descargamos el mapa de España (level 1: comunidades)
espania_shp <- getData('GADM', country = 'Spain', level = 1)

# Convertimos a data frame para ggplot2
mapa.comunidades <- fortify(espania_shp, region = "NAME_1")

Se obtiene el objeto de GADM. Para crear un data frame que emplear en ggplot2 necesitamos un campo identificador que la función fortify() (o map_data()) transformará en id. Recomiendo usar como identificador códigos INE porque los nombres de las comunidades autónomas a veces dan problemas de codificación.

Pintar un mapa base

A la hora de pintar el mapa se va a emplear geom_map(), aunque habitualmente se use geom_polygon():

# Desplazamos Canarias (opcional, para visualización)
mapa.comunidades <- mapa.comunidades %>% mutate(
  lat = ifelse(id == 'Islas Canarias', lat + 6, lat),
  long = ifelse(id == 'Islas Canarias', long + 6, long)
)

mapa_base <- ggplot(data = mapa.comunidades, aes(x = long, y = lat)) +
  geom_map(map = mapa.comunidades, aes(map_id = id), fill = NA, color = "grey50") +
  labs(title = "Mapa base") +
  theme_minimal() +
  theme(axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid = element_blank())

mapa_base

mapa_base

Como sabéis, ggplot2 es perfectamente modulable y podéis elegir colores de fondo, de línea, ubicación de títulos… En estos gráficos temáticos se recomienda eliminar los ejes.

Datos para los piechart

Para las tartas vamos a simular datos. En el ejemplo realizaremos una tarta para cada comunidad y el tamaño de la tarta tendrá una escala determinada.

# Datos simulados por comunidad
comunidades <- data.frame(id = unique(mapa.comunidades$id))
comunidades$proporcion_1 <- round(runif(nrow(comunidades)), 2)
comunidades$proporcion_2 <- 1 - comunidades$proporcion_1

# Escala para el tamaño de cada tarta
comunidades$escala <- rpois(nrow(comunidades), 2) + 1

# Ubicamos cada tarta en el punto medio de cada comunidad
ubicacion <- mapa.comunidades %>% 
  group_by(id) %>% 
  summarise(lat = mean(lat), long = mean(long))

comunidades <- left_join(comunidades, ubicacion, by = "id")

Ahora el data frame comunidades tiene la posición (lat, long) y los datos para cada tarta.

Mapa final con geom_scatterpie()

El mapa con el que comienza la entrada se realiza con este sencillo código:

mapa_final <- mapa_base + 
  labs(title = "Gráficos de tarta sobre el mapa") +
  geom_scatterpie(data = comunidades, 
                  aes(x = long, y = lat, group = id, r = escala/2),
                  cols = c('proporcion_1', 'proporcion_2')) +
  scale_fill_manual(values = c("proporcion_1" = "skyblue", "proporcion_2" = "orange")) +
  theme(legend.position = "bottom")

mapa_final

geom_scatterpie() necesita los datos, la posición, el grupo (la región) y el radio (r). En cols especificamos las variables a representar en las porciones. Es una solución visual potente, a pesar de las críticas habituales a los gráficos de tarta. Saludos.