Plot.Mapa {UnalR} | R Documentation |
Cree un widget para visualizar datos geográficos en un mapa interactivo usando
el paquete Leaflet
Description
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.
Usage
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,
...
)
Arguments
datos |
Un data frame, no un vector numérico. |
df |
Argument deprecated, use |
depto |
Una variable numérica dentro del data frame ingresado en |
mpio |
Una variable numérica dentro del data frame ingresado en |
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 |
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 |
estadistico |
Cadena de caracteres que indica el estadístico a graficar
en el mapa. Los valores permitidos son |
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 |
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 |
colNA |
Cadena de caracteres indicando el color que tendrá la categoría
|
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 |
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
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 |
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 |
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 |
colBorde |
Cadena de caracteres indicando el color del borde de los polígonos al momento de pasar el cursor sobre él. |
compacto |
Si es |
textSize |
Valor numérico que indica el tamaño del texto de las etiquetas
de los municipios. El valor para los departamentos será |
limpio |
Si es |
estatico |
Si es |
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.
|
... |
Abc. |
Details
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.
Value
Retorna el mapa (objeto widget de HTML) creado mediante Leaflet
, el cual
pertenece a la clase "leaflet" y "htmlwidget".
Examples
# 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")
)
)
# ---------------------------------------------------------------------------
# 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
)
# ---------------------------------------------------------------------------
# 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)
# ---------------------------------------------------------------------------
# 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)
# ---------------------------------------------------------------------------
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)
)
)