Mapas para Explorar los Resultados del Censo 2024 de Población y Viviendas en Chile usando ‘d3po’

Luego de corregir los códigos territoriales en los datos del Censo 2024, muestro algunos mapas interactivos utilizando ‘d3po’.
Author

Mauricio “Pachá” Vargas S.

Published

December 8, 2025

Si esta publicación te resulta útil, te agradecería que hicieras una pequeña donación en Buy Me a Coffee. La utilizaré para continuar con mis iniciativas de código abierto.

Puedes enviarme preguntas para el blog utilizando este formulario y suscribirse para recibir un correo electrónico cuando haya una nueva publicación.

Luego de corregir los códigos territoriales en los datos del Censo 2024 (https://github.com/pachadotdev/censo2024-duckdb), ahora procedo a mostrar algunos mapas interactivos utilizando “d3po”. El código para procesar las tablas censales y generar los estadísticos se encuentra en: https://github.com/pachadotdev/blog-materials/tree/main/2025/12/08/censo2024-mapas.

Personas por comuna

Resultados de la Región Metropolitana:

if (!require("sf")) install.packages("sf")
if (!require("dplyr")) install.packages("dplyr")
if (!require("chilemapas")) install.packages("chilemapas")
if (!require("d3po")) install.packages("d3po")

library(sf)
library(dplyr)
library(chilemapas)
library(d3po)

# datos pre-procesados
personas_por_comuna <- readRDS("~/Documents/blog-materials/2025/12/08/censo2024-mapas/personas_por_comuna.rds")

personas_por_comuna
# A tibble: 346 × 3
   comuna n_personas territorio   
   <chr>       <dbl> <chr>        
 1 01101      199587 Iquique      
 2 01107      142086 Alto Hospicio
 3 01401       16878 Pozo Almonte 
 4 01402        1335 Camiña       
 5 01403         790 Colchane     
 6 01404        2858 Huara        
 7 01405        6272 Pica         
 8 02101      401096 Antofagasta  
 9 02102       14084 Mejillones   
10 02103        1472 Sierra Gorda 
# ℹ 336 more rows
# mapa includo en el paquete chilemapas
mapa_comunas
# A tibble: 345 × 4
   codigo_comuna codigo_provincia codigo_region                         geometry
   <chr>         <chr>            <chr>                       <MULTIPOLYGON [°]>
 1 01401         014              01            (((-68.86081 -21.28512, -68.921…
 2 01403         014              01            (((-68.65113 -19.77188, -68.811…
 3 01405         014              01            (((-68.65113 -19.77188, -68.635…
 4 01402         014              01            (((-69.31789 -19.13651, -69.271…
 5 01404         014              01            (((-69.39615 -19.06125, -69.400…
 6 01107         011              01            (((-70.1095 -20.35131, -70.1243…
 7 01101         011              01            (((-70.09894 -20.08504, -70.102…
 8 02104         021              02            (((-68.98863 -25.38016, -68.987…
 9 02101         021              02            (((-70.60654 -23.43054, -70.601…
10 02201         022              02            (((-67.94302 -22.38175, -67.955…
# ℹ 335 more rows
# como el mapa ya esta en sf, funciona directamente con d3po
# falta unir con la tabla de personas_por_comuna
mapa1 <- personas_por_comuna |>
    filter(substr(comuna, 1, 2) == "13") |>
    inner_join(mapa_comunas, by = c("comuna" = "codigo_comuna")) |>
    st_as_sf() # asegurarse que es un sf

gradiente <- tintin::tintin_clrs()[2:1]

d3po(mapa1, width = 800, height = 600) %>%
  po_geomap(daes(group = territorio, size = n_personas, color = gradiente, gradient = T, tooltip = territorio)) %>%
  po_labels(
    title = "Población total por comuna - Región Metropolitana",
    subtitle = "Fuente: Basado en Microdatos Censo 2024 de Población y Viviendas de Chile"
  )

En el mapa se observa que Santiago, Maipú y Puente Alto son las comunas con mayor población en la Región Metropolitana. Las tres comunas están en el mismo orden de magnitud, valores cercanos a 500,000 habitantes cada una, con la distinción de que Santiago tiene una densidad poblacional mucho mayor debido a su menor superficie.

Índice de hacinamiento por comuna

Con la variable “p5_num_dormitorios” se puede seguir la metodología del Ministerio de Desarrollo Social, que consiste en tomar la razón entre el número de personas residentes en la vivienda y el número de dormitorios de la misma y luego se tramifica la variable en las siguientes categorías:

  1. Sin hacinamiento [0;2,5)
  2. Medio [2,5;3,5)
  3. Alto [3,5;4,9)
  4. Crítico [5,+∞)

Resultados de la Región Metropolitana:

hacinamiento_por_comuna <- readRDS("~/Documents/blog-materials/2025/12/08/censo2024-mapas/hacinamiento_por_comuna.rds")

mapa2 <- hacinamiento_por_comuna |>
    filter(substr(comuna, 1, 2) == "13") |>
    inner_join(mapa_comunas, by = c("comuna" = "codigo_comuna")) |>
    st_as_sf() # asegurarse que es un sf

d3po(filter(mapa2, categoria_hacinamiento == "Sin hacinamiento"), width = 800, height = 600) %>%
  po_geomap(daes(group = territorio, size = p_viviendas, color = gradiente, gradient = T, tooltip = territorio)) %>%
  po_labels(
    title = "Porcentaje de viviendas sin hacinamiento por comuna - Región Metropolitana",
    subtitle = "Fuente: Basado en Microdatos Censo 2024 de Población y Viviendas de Chile"
  )
d3po(filter(mapa2, categoria_hacinamiento == "Medio"), width = 800, height = 600) %>%
  po_geomap(daes(group = territorio, size = p_viviendas, color = gradiente, gradient = T, tooltip = territorio)) %>%
  po_labels(
    title = "Porcentaje de viviendas con hacinamiento medio por comuna - Región Metropolitana",
    subtitle = "Fuente: Basado en Microdatos Censo 2024 de Población y Viviendas de Chile"
  )
d3po(filter(mapa2, categoria_hacinamiento == "Alto"), width = 800, height = 600) %>%
  po_geomap(daes(group = territorio, size = p_viviendas, color = gradiente, gradient = T, tooltip = territorio)) %>%
  po_labels(
    title = "Porcentaje de viviendas con hacinamiento alto por comuna - Región Metropolitana",
    subtitle = "Fuente: Basado en Microdatos Censo 2024 de Población y Viviendas de Chile"
  )
d3po(filter(mapa2, categoria_hacinamiento == "Crítico"), width = 800, height = 600) %>%
  po_geomap(daes(group = territorio, size = p_viviendas, color = gradiente, gradient = T, tooltip = territorio)) %>%
  po_labels(
    title = "Porcentaje de viviendas con hacinamiento crítico por comuna - Región Metropolitana",
    subtitle = "Fuente: Basado en Microdatos Censo 2024 de Población y Viviendas de Chile"
  )

Primer mapa: 85% de las comunas no tiene hacinamiento.

Segundo, tercer y cuarto mapa: Comunas como Estación Central tienen en torno a un 15% de sus viviendas con hacinamiento medio a crítico.

Se puede realizar un ejercicio similar a nivel sub-comunal procesando la cartografía censal. Para quienes se interesen en realizar dicho análisis, el año 2017 hice algo similar a nivel de geocódigo: https://ropensci.org/es/blog/2021/07/27/censo2017-es/.