Mapa de Complejidad Economica

Definicion de las librerias que se van ha utilizar.

library(leaflet)
library(leaflet.extras)
library(leafem)
library(htmlwidgets)
library(sf)

En la siguiente lineas de codigos realizas lo siguiente:

#setwd("C:/Users/eagel/OneDrive/Escritorio/Lalo/Escuela/Practicas/Chamba/Leaflet")

datos = read.csv("C:/Users/eagel/OneDrive/Escritorio/Lalo/Escuela/Practicas/Chamba/Leaflet/Complejidad_Economica_Hidalgo.csv")

datos = datos |> dplyr::mutate(CVEGEO = as.numeric(substr(x = CVEGEO, start = 3, stop = 5)))

geometrias = sf::read_sf("C:/Users/eagel/OneDrive/Escritorio/Lalo/Escuela/Practicas/Chamba/Leaflet/municipiosjair/municipiosjair.shp")
geometrias = geometrias |> dplyr::select(CVE_MUN, NOM_MUN) |> dplyr::mutate(CVE_MUN = as.numeric(CVE_MUN))

datos = merge(x = datos, y = geometrias, by.x = "CVEGEO", by.y = "CVE_MUN", all.x = T)

ice_2015 = datos |> dplyr::select(CVEGEO, ICE_Personal_2015., NOM_MUN, geometry) |> sf::st_as_sf()
ice_2020A = datos |> dplyr::select(CVEGEO, ICE_Personal_2020A, NOM_MUN, geometry) |> sf::st_as_sf()
ice_2024B = datos |> dplyr::select(CVEGEO, ICE_Personal_2024B, NOM_MUN, geometry) |> sf::st_as_sf()

ice_2015 = ice_2015[order(ice_2015$ICE_Personal_2015., decreasing = T), ]
ice_2015$ranking =  c(1:nrow(ice_2015))

ice_2020A = ice_2020A[order(ice_2020A$ICE_Personal_2020A, decreasing = T), ]
ice_2020A$ranking =  c(1:nrow(ice_2020A))

ice_2024B = ice_2024B[order(ice_2024B$ICE_Personal_2024B, decreasing = T), ]
ice_2024B$ranking =  c(1:nrow(ice_2024B))

Se define una paleta de colores usando la función colorNumeric de la librería leaflet. Esta función crea una escala de colores basada en valores numéricos. Para cada año, se genera una función de color que asigna tonos según el valor máximo y mínimo de la complejidad económica. Los pasos de la escala se calculan como:

\[ \text{paso} = \frac{\text{valor_maximo} - \text{valor_minimo}}{84} \]

El 84 representa es por el numero de municipios del estado.

paleta_2015 = colorNumeric(palette = c("green", "yellow", "red"), domain = seq(min(ice_2015$ICE_Personal_2015.),  max(ice_2015$ICE_Personal_2015.) ,(max(ice_2015$ICE_Personal_2015.) -  min(ice_2015$ICE_Personal_2015.))/84), reverse = T)

paleta_2020A = colorNumeric(palette = c("green", "yellow", "red"), domain = seq(min(ice_2020A$ICE_Personal_2020A), max(ice_2020A$ICE_Personal_2020A) ,(max(ice_2020A$ICE_Personal_2020A) -  min(ice_2020A$ICE_Personal_2020A))/84), reverse = T)

paleta_2024B = colorNumeric(palette = c("green", "yellow", "red"), domain = seq(min(ice_2024B$ICE_Personal_2024B), max(ice_2024B$ICE_Personal_2024B) ,(max(ice_2024B$ICE_Personal_2024B) -  min(ice_2024B$ICE_Personal_2024B))/84), reverse = T)

Para generar un mapa en R usando leaflet, podemos utilizar el siguiente código: leaflet() |> addTiles(). Esto crea un mapa interactivo con una capa base de addTiles().

Para agregar elementos geométricos, debemos conocer el tipo de geometría con el que estamos trabajando. Puede ser: polygons (polígonos), lines (líneas), points (puntos), rasters (raster), etc.

Por ejemplo, para agregar polígonos, usamos addPolygons() con los siguientes parámetros:

Donde en este caso, notemos que en el apartado popup vamos a escribir como en HTML por eso pasamos esa funcion con el lapply.

El apartado addLayersControl permite gestionar las capas del mapa. Sus principales parámetros son:

El apartado hideGroup se utiliza para que algunas capas del mapa estén ocultas al iniciarlo.

El apartado addSearchFeatures permite realizar búsquedas dentro del mapa. Sus parámetros principales son:

El apartado addLogo permite pegar un logo dentro del mapa. Sus parámetros principales son: - img: Link o direccion local de la imagen. - position: La posicion dentro del mapa. - src: Indica si sera local la imagen o desde la web se cargara.

mapa_web = leaflet() |>
  addTiles() |>
  addPolygons(data = ice_2024B, 
              label = ice_2024B$NOM_MUN, 
              popup =  paste("Municipio:", "<b>", ice_2024B$NOM_MUN ,"</b>",  "<br>", "Indice de Complejidad: ",  "<b>" , round(ice_2024B$ICE_Personal_2024B , digits = 2) ,"</b>", "<br>", "Ranking:", "<b>", ice_2024B$ranking ,"</b>") |> lapply(FUN = function(x) { htmltools::HTML(x)}),
              group = "2024B", 
              color = paleta_2024B(ice_2024B$ICE_Personal_2024B)) |>
  addPolygons(data = ice_2020A, 
              label = ice_2020A$NOM_MUN, 
              popup =  paste("Municipio:", "<b>", ice_2020A$NOM_MUN ,"</b>", "<br>", "Indice de Complejidad: ",  "<b>" , round(ice_2020A$ICE_Personal_2020A, digits = 2) ,"</b>", "<br>", "Ranking:", "<b>", ice_2020A$ranking ,"</b>") |> lapply(FUN = function(x) { htmltools::HTML(x)}),
              group = "2020A", 
              color = paleta_2020A(ice_2020A$ICE_Personal_2020A)) |>
  addPolygons(data = ice_2015, 
              label = ice_2015$NOM_MUN, 
              popup =  paste("Municipio:", "<b>", ice_2015$NOM_MUN ,"</b>", "<br>", "Indice de Complejidad: ",  "<b>" , round(ice_2015$ICE_Personal_2015., digits = 2) ,"</b>", "<br>", "Ranking:", "<b>", ice_2015$ranking ,"</b>") |> lapply(FUN = function(x) { htmltools::HTML(x)}),
              group = "2015", 
              color = paleta_2015(ice_2015$ICE_Personal_2015.) ) |>
  addLayersControl(baseGroups = c("2024B", "2020A", "2015"),       # OverlayGROUPS pueden ser ambos
                   position = "topright", 
                   options = layersControlOptions(collapsed = F)) |>
  hideGroup(group = c("2020A", "2015")) |>
  addSearchFeatures(targetGroups = c("2024B"), 
                    options = searchFeaturesOptions(
                      zoom = 16,    # Realiza Zoom 
                      openPopup = T,  #Simula clic
                      position =  "bottomleft",
                      hideMarkerOnCollapse = FALSE
                    ))  |>
  addLogo(img = "sigeh3.png", position = "bottomleft", src = "local")  

Vizualizacion del mapa

mapa_web

Nota: Checar los codigos de mapa_puntos y mapa_lines para verificar cuando tienes informacion en que puntos cae, mas funciones, etc.