El otro día me entretuve en crear

tras ver

Muestra, municipio a municipio, el año (censurado por la izquierda en 1996) en el que se alcanzó la población máxima de acuerdo con los datos del padrón.
Notas:
- Como he dicho, la API del INE solo ofrece datos de los últimos 30 años. Los datos anteriores, quién sabrá dónde estarán.
- He usado el término censura en su acepción estadística.
- No me he entretenido en representar Canarias. Lo siento.
- Gran parte del código ha sido desarrollado por Claude.
- Claude ha sabido, de hecho, identificar la llamada a la API del INE necesaria para bajar los datos correspondientes.
- El INE ha puesto a disposición de los usuarios un paquete,
ineapirque facilita la descarga de datos de sus APIs. Bien. - Los límites de los municipios los he bajado en formato GeoJSON del portal del Instituto Geográfico Nacional.
Y el código, a continuación (por si alguien quiere seguir jugando con él).
library(ineapir)
library(sf)
library(plyr)
library(ggplot2)
df <- get_data_table(
idTable = 29005,
tip = "AM",
nlast = 100,
verbose = TRUE
)
df_total <- df[grep("Total. Total habitantes. Personas.", df$Nombre),]
df_total <- df_total[sapply(df_total$Data, nrow) > 0,]
for (i in 1:nrow(df_total)) {
df_total$Data[[i]]$Nombre <- df_total$MetaData[[i]]$Nombre[1]
df_total$Data[[i]]$Codigo <- df_total$MetaData[[i]]$Codigo[1]
}
tmp <- do.call(rbind, df_total$Data)
tmp <- ddply(tmp, .(Nombre, Codigo), transform, rank = rank(-Valor, ties.method = "last"))
tmp <- tmp[tmp$rank == 1,]
tmp <- tmp[, c("Anyo", "Valor", "Nombre", "Codigo")]
colnames(tmp) <- c("year", "pop", "name", "CODIGOINE")
municipios <- st_read("Municipios_-7023933172321596289.geojson")
tmp <- merge(municipios, tmp)
tmp <- tmp[tmp$CODNUT1 != "ES7",]
ggplot(tmp) +
geom_sf(aes(fill = year), color = NA) +
scale_fill_viridis_c(name = "Año") +
labs(
title = "Año en que los municipios españoles alcanzaron su población máxima",
subtitle = "Excluyendo Canarias · Período 1996–2023",
caption = "Fuente: INE Padrón Municipal · Límites: IGN/CNIG CC-BY 4.0"
) +
theme_void() +
theme(
plot.title = element_text(size = 16, face = "bold", margin = margin(b = 6)),
plot.subtitle = element_text(size = 11, color = "grey40", margin = margin(b = 10)),
plot.caption = element_text(size = 8, color = "grey60", hjust = 0),
plot.margin = margin(10, 10, 10, 10)
)