Esta es una plantilla especializada para reportes con mapas interactivos usando Leaflet. Los mapas son completamente responsivos y se adaptan tanto a dispositivos móviles como a navegadores de escritorio.
Este template incluye:
Leaflet es una librería de JavaScript de código abierto para mapas
interactivos optimizada para móviles. En R, la librería
leaflet nos permite crear mapas interactivos de alta
calidad que se integran perfectamente con R Markdown.
Ventajas principales: - Mapas totalmente interactivos (zoom, pan, popup) - Compatibilidad móvil excelente - Múltiples capas de mapas base - Soporte para marcadores, polígonos y líneas
# Crear mapa centrado en México
mapa_mexico <- leaflet() %>%
addTiles() %>% # Agregar mapa base de OpenStreetMap
setView(lng = -102.5528, lat = 23.6345, zoom = 5) %>% # Centrar en México
addMarkers(lng = -99.1332, lat = 19.4326,
popup = "<b>Ciudad de México</b><br/>Capital de México") %>%
addMarkers(lng = -103.3496, lat = 20.6597,
popup = "<b>Guadalajara</b><br/>Perla Tapatía") %>%
addMarkers(lng = -100.3161, lat = 25.6866,
popup = "<b>Monterrey</b><br/>Sultana del Norte")
mapa_mexico
El siguiente mapa muestra las principales ciudades de México con marcadores personalizados y información detallada en los popups.
# Datos de ciudades mexicanas
ciudades <- data.frame(
ciudad = c("CDMX", "Guadalajara", "Monterrey", "Puebla", "Tijuana", "León", "Juárez"),
lat = c(19.4326, 20.6597, 25.6866, 19.0414, 32.5027, 21.1619, 31.6904),
lng = c(-99.1332, -103.3496, -100.3161, -98.2063, -117.0024, -101.6957, -106.4245),
poblacion = c(9209944, 1385629, 1135512, 1692181, 1641570, 1238962, 1391180),
estado = c("CDMX", "Jalisco", "Nuevo León", "Puebla", "Baja California", "Guanajuato", "Chihuahua")
)
# Crear íconos personalizados
iconos_morados <- makeIcon(
iconUrl = "https://raw.githubusercontent.com/pointhi/leaflet-color-markers/master/img/marker-icon-2x-violet.png",
shadowUrl = "https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/images/marker-shadow.png",
iconWidth = 25, iconHeight = 41,
iconAnchorX = 12, iconAnchorY = 41,
shadowWidth = 41, shadowHeight = 41
)
# Crear mapa con marcadores personalizados
mapa_ciudades <- leaflet(ciudades) %>%
addTiles() %>%
addProviderTiles(providers$CartoDB.Positron) %>% # Mapa base limpio
setView(lng = -102.5528, lat = 23.6345, zoom = 5) %>%
addMarkers(~lng, ~lat,
icon = iconos_morados,
popup = ~paste("<b>", ciudad, "</b><br/>",
"Estado: ", estado, "<br/>",
"Población: ", format(poblacion, big.mark = ","), " habitantes"),
label = ~paste(ciudad, "-", estado))
mapa_ciudades
# Crear mapa con múltiples capas
mapa_capas <- leaflet(ciudades) %>%
# Agregar diferentes mapas base
addTiles(group = "OpenStreetMap") %>%
addProviderTiles(providers$CartoDB.Positron, group = "CartoDB") %>%
addProviderTiles(providers$Esri.WorldImagery, group = "Satélite") %>%
# Configurar vista inicial
setView(lng = -102.5528, lat = 23.6345, zoom = 5) %>%
# Agregar marcadores con círculos proporcionales a la población
addCircleMarkers(~lng, ~lat,
radius = ~sqrt(poblacion)/1000,
color = "#8e24aa",
stroke = TRUE,
fillOpacity = 0.7,
popup = ~paste("<b>", ciudad, "</b><br/>",
"Estado: ", estado, "<br/>",
"Población: ", format(poblacion, big.mark = ","), " habitantes"),
group = "Población") %>%
# Agregar marcadores normales
addMarkers(~lng, ~lat,
icon = iconos_morados,
popup = ~paste("<b>", ciudad, "</b><br/>",
"Estado: ", estado),
group = "Marcadores") %>%
# Agregar controles de capas
addLayersControl(
baseGroups = c("OpenStreetMap", "CartoDB", "Satélite"),
overlayGroups = c("Población", "Marcadores"),
options = layersControlOptions(collapsed = FALSE)
) %>%
# Ocultar marcadores por defecto, mostrar solo círculos
hideGroup("Marcadores")
mapa_capas
Los círculos en el mapa representan la población de cada ciudad de manera proporcional. Se puede observar que:
# Crear tabla interactiva con DT (versión simplificada)
DT::datatable(
ciudades,
caption = "Principales Ciudades de México",
options = list(
pageLength = 10,
scrollX = TRUE
),
colnames = c("Ciudad", "Latitud", "Longitud", "Población", "Estado")
) %>%
DT::formatCurrency("poblacion", currency = "", interval = 3, mark = ",", digits = 0)
# Simular datos de temperatura para el mapa de calor
library(dplyr)
set.seed(123)
puntos_calor <- data.frame(
lat = runif(100, 14.5, 32.7), # Latitudes de México
lng = runif(100, -118.4, -86.7), # Longitudes de México
temperatura = round(rnorm(100, 25, 8), 1) # Temperaturas simuladas
)
# Crear mapa de calor
mapa_calor <- leaflet(puntos_calor) %>%
addTiles() %>%
addProviderTiles(providers$CartoDB.DarkMatter) %>%
setView(lng = -102.5528, lat = 23.6345, zoom = 5) %>%
addHeatmap(lng = ~lng, lat = ~lat, intensity = ~temperatura,
blur = 20, max = 0.05, radius = 15) %>%
addLegend("bottomright",
colors = c("#313695", "#4575b4", "#abd9e9", "#fee090", "#f46d43", "#a50026"),
labels = c("< 10°C", "10-15°C", "15-20°C", "20-25°C", "25-30°C", "> 30°C"),
title = "Temperatura")
mapa_calor
Optimización para dispositivos móviles:
Mejores prácticas: - Usar marcadores no muy pequeños para facilitar el toque - Simplificar la información en popups para pantallas pequeñas - Evitar sobrecarga de datos en mapas móviles - Usar controles de capas colapsables
Para expandir este análisis se puede:
Para aprender más sobre mapas en R:
Reporte generado el 2025-06-27 usando R Markdown y Leaflet