
Cree un widget para visualizar datos geográficos en un mapa interactivo usando el paquete Leaflet
Plot.Mapa.Rd
Esta función está planeada para facilitar la creación de mapas interactivos
compatible con plataformas móviles y de escritorio, además de estar diseñada
pensando en la simplicidad y el rendimiento. Esta utilidad produce mapas que
tienen controles para hacer zoom, desplazarse y alternar capas y puntos entre
mostrar y ocultar. Igualmente, permite incrustar mapas en webs, documentos
R Markdown
y aplicaciones Shiny
. Todo lo anterior basado enteramente en la
librería Leaflet
, la cual es la biblioteca JavaScript
de código abierto más
popular para mapas interactivos.
Uso
Plot.Mapa(
datos,
df,
depto,
mpio,
variable,
agregado = TRUE,
zoomIslas = FALSE,
estadistico = c("Conteo", "Promedio", "Mediana", "Varianza", "SD", "CV", "Min", "Max"),
tipo = c("Deptos", "SiNoMpios", "Mpios", "DeptoMpio"),
SiNoLegend,
titulo,
naTo0 = TRUE,
colNA = "#EEEEEE",
centroideMapa,
zoomMapa = 6,
baldosas,
cortes,
colores,
showSedes = TRUE,
colSedes,
opacidad = 0.7,
colBorde,
compacto = TRUE,
textSize = 10,
limpio = FALSE,
estatico = FALSE,
estilo,
...
)
Argumentos
- datos
Un data frame, no un vector numérico.
- df
Argument deprecated, use
datos
instead.- depto
Una variable numérica dentro del data frame ingresado en
datos
, que contiene los códigos de los departamentos, de acuerdo con la codificación de la División Político-Administrativa de Colombia (DIVIPOLA) dispuesta por elDANE
.- mpio
Una variable numérica dentro del data frame ingresado en
datos
, que contiene los códigos de los municipios, de acuerdo con la codificación de la División Político-Administrativa de Colombia (DIVIPOLA) dispuesta por elDANE
.- variable
Variable auxiliar con la cual se calculará el estadístico previamente seleccionado. Para el caso en que la estadística a calcular sea el conteo no es necesario (no se usará) especificar dicha variable numérica.
- agregado
Si es
TRUE
(valor predeterminado) indica que el data frame ingresado se deberá agrupar porque no es un consolidado, sino que se cuenta con los microdatos. Por el contrario, si se especifica enFALSE
quiere decir que cada fila es única y se cuenta con el estadístico ya calculado, además de poder ingresar únicamente uno de los argumentosdepto
ompio
.- zoomIslas
Valor booleano que indica si desea realizar un zoom al archipiélago de San Andrés, Providencia y Santa catalina. El valor a retornar no será un único plot sino una lista compuesta por dos figuras, una para el mapa sin las islas y otro únicamente con ellas, para que usted realice posteriormente la unión de ambos. Aplica únicamente para el caso estático y su valor por defecto es
FALSE
.- estadistico
Cadena de caracteres que indica el estadístico a graficar en el mapa. Los valores permitidos son
"Conteo"
(valor predeterminado),"Promedio"
,"Mediana"
,"Varianza"
,"SD"
,"CV"
,"Min"
y"Max"
.- tipo
Cadena de caracteres que indica el tipo de mapa a graficar. Los valores permitidos son "Deptos", "SiNoMpios", "Mpios" y "DeptoMpio" (valor predeterminado). Se emparejará parcialmente.
- SiNoLegend
Vector de caracteres de longitud 2 que permite editar las opciones de la etiqueta de la leyenda de los mapas
"SiNoMpios"
. El valor por defecto es("0", "1 o más")
.- titulo
Cadena de caracteres indicando la segregación que presenta el mapa y el periodo al que hace referencia éste, separados por un espacio, por ejemplo, "Admitidos 2021-I".
- naTo0
Si es
TRUE
(valor predeterminado) los valores introducidos comoNA
(not available) se cambiarán por el valor de 0. Ajústelo aFALSE
para que no se realice tal cambio y mostrar en la caja de información la leyenda "Sin Información".- colNA
Cadena de caracteres indicando el color que tendrá la categoría
NA
(si esta se presenta). El valor por defecto es un gris muy claro.- centroideMapa
Cadena de caracteres indicando el departamento que servirá de centroide al momento de graficar el mapa. El valor por defecto es "CUNDINAMARCA". Se emparejará parcialmente.
- zoomMapa
Valor numérico que indica el nivel de zoom del mapa (usado por la función setView()). El valor por defecto es
6
, entre mayor sea su valor más zoom se aplicará al mapa.- baldosas
Vector de caracteres indicando los mapas base con los que se realizará el mapa, sean los popularizados por Google Maps o por terceros. Los valores aceptados son los admitidos por la función addProviderTiles(), así mismo los valores por defecto son
c("CartoDB.Positron", "Esri.WorldStreetMap", "Esri.NatGeoWorldMap")
, algunos otros valores pueden ser:"Esri.DeLorme"
"Esri.WorldTerrain"
"Esri.WorldShadedRelief"
"Esri.WorldPhysical"
"Esri.OceanBasemap"
"Esri.WorldGrayCanvas"
"Esri.WorldImagery"
"Stamen.Toner"
"Stamen.TonerLite"
"Stamen.TonerLines"
"Stamen.Watercolor"
"Stamen.TonerHybrid"
La lista completa la puede consultar aquí
- cortes
Vector numérico indicando los cortes con los cuales se crearán los intervalos. No aplica para el tipo de mapa "SiNoMpios", pues este es binario. Para el tipo de mapa "DeptoMpio" se debe pasar una lista de la siguiente manera
list(Deptos = c(), Mpios = c())
, pues requiere dos cortes, uno para departamentos y otro para municipios.- colores
Vector de caracteres indicando los colores para cada uno de los intervalos con los que cuenta el mapa. Si no se introduce algún vector, se usará una paleta predeterminada dependiendo del tipo de mapa.
- showSedes
Si es
TRUE
(valor predeterminado) en el control de capas (usado en la función addLayersControl()) aparecerá el grupo destinado a mostrar o no la ubicación de las distintas sedes de la Universidad Nacional de Colombia. Ajústelo aFALSE
para que en el control de capas no aparezca dicha opción.- colSedes
Vector de caracteres (de longitud 9) indicando los colores del icono de ubicación de las distintas sedes de la Universidad Nacional de Colombia. Los colores permitidos son los que acepta la función makeAwesomeIcon(), es decir, "red", "darkred", "lightred", "orange", "beige", "green", "darkgreen", "lightgreen", "blue", "darkblue", "lightblue", "purple", "darkpurple", "pink", "cadetblue", "white", "gray", "lightgray", "black".
- opacidad
Un número entre \([0, 1]\) que indica la opacidad de las capas.
- colBorde
Cadena de caracteres indicando el color del borde de los polígonos al momento de pasar el cursor sobre él.
- compacto
Si es
TRUE
(valor predeterminado) el control de capas se representará como un icono que se expande cuando se coloca el cursor sobre él. Ajústelo aFALSE
para que el control de capas siempre aparezca en su estado expandido.- textSize
Valor numérico que indica el tamaño del texto de las etiquetas de los municipios. El valor para los departamentos será \(+2px\).
- limpio
Si es
FALSE
(valor predeterminado) se mostrará el MiniMapa, la barra de escala y los botones para ver en pantalla completa, retornar zoom y localización. Ajústelo aTRUE
si desea omitir dichas herramientas adicionales al mapa.- estatico
Si es
FALSE
(valor predeterminado) el gráfico a retornar será dinámico (dependiendo de la librería seleccionada), en caso contrario se retornará un gráfico estático construido conggplot2
.- estilo
Lista compuesta por varios parámetros, los cuales van a ser usados para graficar el mapa estático y cuyo objetivo es personalizar pequeños detalles de éste.
anchoBorde
: Número decimal que indica el ancho de la línea de contorno de los polígonos del mapa. El valor por defecto es0.5
.labelX
,labelY
: Cadena de caracteres indicando la etiqueta del eje respectivo. El valor por defecto es"Longitud"
y"Latitud"
respectivamente.xlim
,ylim
: Vector numérico que especifica los límites de los ejes respectivos.Legend
: Igual uso quegg.Legend
enPlot.Series()
Labs
: Igual uso quegg.Texto
enPlot.Series()
. Con la adición del argumentofill
, el cual especifica el título de leyenda. El valor por defecto es"Statistic"
. Si esNULL
, se omitirá dicho título.Theme
: Igual uso quegg.Tema
enPlot.Series()
Style
: Cadena de caracteres que indica el tipo de mapa a graficar. Los valores permitidos son"Intervalo"
,"SiNo"
,"Calor"
yNA
(valor predeterminado). Se emparejará parcialmente.Text
: Lista que especifica aspectos como el color y tamaño de los títulos de los polígonos. Para más información, consulte la función geom_sf_text().scaleX
,scaleY
: Vector numérico que especifica los puntos o cortes a graficar en dicho eje. Sacado de la función scale_x_continuous().
- ...
Abc.
Valor
Retorna el mapa (objeto widget de HTML) creado mediante Leaflet
, el cual
pertenece a la clase "leaflet" y "htmlwidget".
Detalles
Los vectores depto
y mpio
introducidos hacen referencia a atributos atómicos,
es decir, la pareja formada por (depto, mpio)
debe corresponder a un individuo.
En los argumentos no se acepta la entrada de objetos espaciales o polígonos.
Ejemplos
# library(dplyr)
df <- ejGraduados |> filter(YEAR == 2021) |>
select(
COD_DEP_NAC, COD_CIU_NAC, DEP_NAC, CIU_NAC, LON_CIU_NAC, LAT_CIU_NAC
)
Plot.Mapa(
datos = df,
depto = COD_DEP_NAC,
mpio = COD_CIU_NAC,
tipo = "SiNoMpios",
titulo = "Graduados 2021-I",
baldosas = c(
"Esri.WorldPhysical", "Esri.DeLorme", "Esri.WorldShadedRelief",
"Esri.WorldTerrain", "Esri.OceanBasemap"
),
colores = c("#10F235", "#00BCB5"),
colSedes = rep("green", 9),
opacidad = 0.6,
colBorde = "#FF4D00",
compacto = FALSE,
textSize = 16,
limpio = TRUE
)
# ---------------------------------------------------------------------------
Plot.Mapa(
datos = df,
depto = COD_DEP_NAC,
mpio = COD_CIU_NAC,
tipo = "DeptoMpio",
titulo = "Graduados 2021-I",
cortes = list(
Deptos = c(0, 10, 20, 50, 500, Inf), Mpios = c(0, 1, 5, 10, 100, Inf)
),
colores = list(
Deptos = c("#6812F2", "#5769F6", "#F6ED0D", "#EE6115", "#EC2525"),
Mpios = c("#E7F15D", "#ACBD37", "#E15E32", "#A82743", "#5C323E")
)
)
if (FALSE) { # all(FALSE) && require("dplyr") && require("magrittr")
# ---------------------------------------------------------------------------
# library(dplyr); library(magrittr)
ejSaberPro2020 %>%
select(
Code_Dept = COD_DEP_NAC,
Code_Mun = COD_CIU_NAC,
Edad = EDAD_MOD,
PBM = PBM_ORIG,
ScoreGlobal = PUNTAJE_GLOBAL,
ScoreCompCiud = PUNT_COMP_CIUD,
ScoreComuEscr = PUNT_COMU_ESCR,
ScoreIngles = PUNT_INGLES,
ScoreLectCrit = PUNT_LECT_CRIT,
ScoreRazCuant = PUNT_RAZO_CUANT
) %$%
Plot.Mapa(
datos = .,
depto = Code_Dept,
mpio = Code_Mun,
estadistico = "Mediana",
variable = ScoreGlobal,
tipo = "DeptoMpio",
titulo = "P.Global 2020",
naTo0 = FALSE,
colNA = "#472985",
centroideMapa = "ANTIOQUIA",
zoomMapa = 8,
cortes = list(
Deptos = c(0, 155, 170, 180, 185, Inf), Mpios = c(0, 50, 178, 200, 250, Inf)
),
colores = list(
Deptos = c("#FF7D5A", "#FDBD7D", "#E5DF73", "#63D2A8", "#0055A1"),
Mpios = c("#E7F15D", "#ACBD37", "#E15E32", "#A82743", "#5C323E")
),
showSedes = FALSE
)
}
if (FALSE) { # all(FALSE) && require("cowplot")
# ---------------------------------------------------------------------------
# Ejemplo usando el caso estático (ggplot2)
# library(cowplot)
Plot.Mapa(
datos = df,
depto = COD_DEP_NAC,
mpio = COD_CIU_NAC,
zoomIslas = TRUE,
tipo = "Mpios",
titulo = "N\u00daM. DE GRADUADOS \u00d7 MUNICIPIO",
colNA = "#4ACB46",
cortes = c(0, 1, 10, Inf),
colores = c("#009CC8", "#EE6115", "#EC2525"),
opacidad = 0.6,
estatico = TRUE,
estilo = list(
Style = "Intervalo", Theme = 2, anchoBorde = 0.5,
Legend = list(legend.position = "bottom", legend.direction = "horizontal"),
Labs = list(subtitle = "A\u00f1o 2021", caption = "(*) Lugar de Nacimiento", tag = "\u00ae")
)
) -> listMaps
# library(cowplot); library(ggplot2)
# | Tema | Mapa | y | width |
# |:----------:|:----------------------------:|:----:|:-----:|
# | 1:6, 10:11 | San Andrés | 0.36 | 0.06 |
# | | Providencia y Santa Catalina | 0.39 | 0.055 |
# | 9 | ° ° ° | 0.36 | 0.07 |
# | | * * * | 0.39 | 0.065 |
# | 12:14 | ° ° ° | 0.33 | 0.11 |
# | | * * * | 0.36 | 0.10 |
ggdraw() +
draw_plot(listMaps$M_COL) +
draw_plot(listMaps$M_SanAndres , x = 0.27, y = 0.36, width = 0.060) +
draw_plot(listMaps$M_Providencia, x = 0.33, y = 0.39, width = 0.055)
# ggplot2::ggsave("COL.png", width = 12, height = 10, dpi = 550)
}
if (FALSE) { # all(FALSE) && require("tibble") && require("cowplot")
# ---------------------------------------------------------------------------
# library(tibble)
PIB <- tibble(
DIVIPOLA = c(91,05,81,08,11,13,15,17,18,85,19,20,27,23,25,94,95,
41,44,47,50,52,54,86,63,66,88,68,70,73,76,97,99),
Valor = c(883,177837,6574,52961,301491,NA,31208,19782,4718,17810,21244,
23244,5069,20842,73592,443,943,19837,14503,16370,41923,18259,
18598,4253,9837,19531,1711,74737,9842,25143,116238,337,799)
)
Plot.Mapa(
datos = PIB,
depto = DIVIPOLA,
variable = Valor,
agregado = FALSE,
zoomIslas = TRUE,
tipo = "Deptos",
naTo0 = FALSE,
colNA = "#543619",
titulo = "PIB \u00d7 DEPARTAMENTO",
cortes = c(0, 500, 5000, 20000, 30000, Inf),
colores = c("#FED600", "#02D46E", "#006389", "#FA006E", "#FC553C"),
colBorde = "#3A0F2D",
estatico = TRUE,
textSize = 0,
estilo = list(
Style = "Intervalo", Theme = 7,
Legend = list(legend.position = "bottom", legend.direction = "horizontal"),
Labs = list(
fill = "PIB", subtitle = "A Precios Corrientes",
caption = "Para el periodo de 2021P (en miles de millones de pesos)"
)
# scaleX = seq(-82, -64, by = 1), scaleY = seq(-4, 14, by = 1)
)
) -> listMaps
# Caso 1:
# Dejando solamente la isla principal (San Andrés) y omitiendo
# las contiguas (Providencia y Santa Catalina)
ggdraw() +
draw_plot(listMaps$M_COL) +
draw_plot(listMaps$M_SanAndres, x = 0.26, y = 0.8, width = 0.4)
# ggsave("COL.png", width = 12, height = 10, dpi = 550)
# Caso 2:
# Conservando todo el departamento y sus distancias reales (no se modifica su polígono espacial)
ggdraw() +
draw_plot(listMaps$M_COL) +
draw_plot(listMaps$M_SanAndres, x = 0.27, y = 0.35, width = 0.08)
# ggsave("COL.png", width = 12, height = 10, dpi = 550)
}
if (FALSE) { # all(FALSE)
# ---------------------------------------------------------------------------
AreaVichada <- tibble(
MunCode = c(99001, 99524, 99624, 99773), Area = c(12409, 20141, 2018, 65674)
)
Plot.Mapa(
datos = AreaVichada,
mpio = MunCode,
variable = Area,
agregado = FALSE,
tipo = "Mpios",
titulo = "\u00c1REA DE LOS MUNICIPIOS DEL\nDEPARTAMENTO DE VICHADA",
naTo0 = FALSE,
centroideMapa = "VICHADA",
estatico = TRUE,
estilo = list(
Style = "Calor", Theme = 9,
Labs = list(caption = "(*) En Metros Cuadrados"),
Text = list(color = "#011532", size = 3)
)
)
}