Mapa bivariado en 6 lineas

NoƩ Osorio

2025-04-09

LibrerĆ­as a usar :)

  • library(tidyverse)
  • library(data.table)
  • library(bivariateLeaflet)
library(tidyverse)
library(data.table)
library(bivariateLeaflet)

Lectura de la base

Por facilidad y solo como ejemplo para este ejercicio filtramos:

  • Incidentes de Atropellado y Motociclista
  • Quitamos los que tienen NA en las coordenadas
c5 = data.table::fread(
  "https://archivo.datos.cdmx.gob.mx/C5/incidentes_viales/inViales_2022_2024.csv"
  )[incidente_c4 %in% c("Atropellado", "Motociclista") & !is.na(longitud) & !is.na(latitud)]

Agregamos las variable de H3 con los siguientes pasos:

  • sf::st_as_sf(coords=c("longitud","latitud"), crs=4326) convierte los datos a un objeto espacial de tipo sf (Simple Features) indicando que las coordenadas son long y lat con un CRS de 4326:
  • con la funcioón de sf crea la geometrĆ­a llamada geometry que se usa para obtener el id de h3 asignando una resolución de 8, (va de 0 a 15)
  • Conteo de h3 por incidente
c5_h3 = c5 %>% 
  sf::st_as_sf(coords=c("longitud","latitud"),crs=4326) %>% 
  mutate(h3=h3jsr::point_to_cell(input=geometry,
                                 res=8)
         ) %>% 
  as_tibble() %>% 
  count(incidente_c4,h3) 

acÔ hacemos un formato wide para tener dos columnas en función del mismo id de h3 y generamos su geometría

c5_geo = c5_h3 %>% 
  pivot_wider(id_cols = h3,
              names_from = incidente_c4,
              values_from = n) %>% 
  mutate(geom=h3jsr::cell_to_polygon(h3)) %>% 
  sf::st_as_sf()

Mapa bivariado

Hicimos mÔs código para preparar los datos que lo que se requiere para hacer el mapa, pero necesitamos esa estructura (dos columnas y geometría) para poder hacer el mapa, la librería bivariateLeaflet facilitó mucho la creación de estos mapas únicamente se llama a la función create_bivariate_map, con los parÔmetros de:

  • data: la base c5 ya en formato

la variable uno y la variable dos, hay colores por default y el mapĆ” etiquetas se puede modificar.

library(bivariateLeaflet)

mapa = create_bivariate_map(
  data = c5_geo,
  var_1 = "Atropellado",    # Total population
  var_2 = "Motociclista"     # Median household income
)

Mapa

mapa