Title: | Una implementación de funciones de uso interno |
---|---|
Description: | Una herramienta rápida y consistente para la disposición de microdatos y la visualización de las cifras y estadísticas oficiales de la Universidad Nacional de Colombia <https://unal.edu.co>. Contiene una biblioteca de funciones gráficas, tanto estáticas como interactivas, que ofrece numerosos tipos de gráficos con una sintaxis altamente configurable y simple. Entre estos encontramos la visualización de tablas HTML, series, gráficos de barras y circulares, mapas, etc. Todo lo anterior apoyado en bibliotecas de JavaScript. English: A fast and consistent tool for the arrangement of microdata and the visualization of official figures and statistics from the National University of Colombia <https://unal.edu.co>. It includes a library of graphical functions, both static and interactive, offering numerous types of charts with a highly configurable and simple syntax. Among these, we find the visualization of HTML tables, series, bar and pie charts, maps, etc. It provides the capability to transition from the interactive to the dynamic world and from one library to another without changing function or syntax. |
Authors: | Jeison Alarcón [aut, cre, ctr]
|
Maintainer: | Jeison Alarcón <[email protected]> |
License: | GPL (>= 3) |
Version: | 1.0.0 |
Built: | 2025-03-01 07:10:34 UTC |
Source: | https://github.com/estadisticaun/unalr |
Esta función permite transformar desde la base de microdatos para obtener el
consolidado final con el cual trabaja la mayoría de las funciones gráficas
disponibles en UnalR
.
Agregar( datos, formula, frecuencia, intervalo, textNA = "Sin Información", ask = FALSE )
Agregar( datos, formula, frecuencia, intervalo, textNA = "Sin Información", ask = FALSE )
datos |
Un data frame con los microdatos. |
formula |
Fórmula en la que el primer componente especificado (antes
del |
frecuencia |
Vector o lista (dependiendo de la cantidad de variables temporales especificadas) numérica con los periodos que debería tener cada una de éstas. |
intervalo |
Vector o lista (dependiendo de la cantidad de variables temporales especificadas) numérica que contiene los períodos de inicio y fin con los cuales se quiere realizar el filtro. |
textNA |
Cadena de caracteres indicando el nombre que se dará a los registros cuando éstos presenten algún dato faltante (en la variable seleccionada más no en las variables temporales especificadas). El valor por defecto es "Sin Información". |
ask |
Si es |
Un data frame o tibble perteneciente a las clases "tbl_df", "tbl" y "data.frame".
# library(readxl) df1 <- read_excel(read_example("TestConsolidado1.xlsx")) df2 <- read_excel(read_example("TestConsolidado2.xlsx")) # Seleccione para cada dataset (A, B, C y D) una de las opciones que se le muestran # en consola (1, 2, 3 y 4) respectivamente. Agregar( formula = TIPO_NIVEL ~ ANO + PERIODO, frecuencia = list("Year" = 2009:2013, "Period" = 1:3), df1 ) -> A Agregar( formula = TIPO_NIVEL ~ ANO + PERIODO, frecuencia = list("Year" = 2009:2013, "Period" = 1:3), df1 ) -> B Agregar( formula = TIPO_NIVEL ~ ANO + PERIODO, frecuencia = list("Year" = 2009:2013, "Period" = 1:3), df1 ) -> C Agregar( formula = TIPO_NIVEL ~ ANO + PERIODO, frecuencia = list("Year" = 2009:2013, "Period" = 1:3), df1 ) -> D all.equal(C, D) G <- Agregar( formula = TIPO_NIVEL ~ ANO + PERIODO, frecuencia = list("Year" = 2009:2013, "Period" = 1:2), intervalo = list(c(2009, 1), c(2013, 1)), datos = df1 ) H <- Agregar( formula = TIPO_NIVEL ~ ANO + PERIODO, frecuencia = list("Year" = 2009:2013, "Period" = 1:2), datos = df1, ask = FALSE ) all.equal(G, H) # Observe las diferentes opciones que se le muestran por consola. Agregar(formula = SEXO ~ YEAR + PERIODO, frecuencia = list("Year" = 2016:2021, "Period" = 1:3), df2) Agregar( formula = SEXO ~ YEAR + PERIODO, frecuencia = list("Year" = 2016:2021, "Period" = 1:3), intervalo = list(c(2018, 1), c(2020, 3)), datos = df2 ) Agregar( formula = SEXO ~ YEAR, frecuencia = 2016:2021, intervalo = c(2018, 2020), datos = df2 ) # Observe que puede especificar más de una variable para realizar el agregado # Se harán agregados simples y se unirán las filas en un único df df1$SEXO <- c("Hombre", NA, NA, NA, NA, "Hombre", "Hombre", "Mujer", NA, NA, "Hombre", "Mujer", "Hombre", "Mujer" ) Agregar( formula = TIPO_NIVEL + SEXO ~ ANO + PERIODO, frecuencia = list("Year" = 2010:2013, "Period" = 1:2), intervalo = list(c(2010, 1), c(2013, 2)), datos = df1 ) -> A Agregar( formula = TIPO_NIVEL + SEXO ~ ANO + PERIODO, frecuencia = list("Year" = 2010:2013, "Period" = 1:2), datos = df1 ) -> B
# library(readxl) df1 <- read_excel(read_example("TestConsolidado1.xlsx")) df2 <- read_excel(read_example("TestConsolidado2.xlsx")) # Seleccione para cada dataset (A, B, C y D) una de las opciones que se le muestran # en consola (1, 2, 3 y 4) respectivamente. Agregar( formula = TIPO_NIVEL ~ ANO + PERIODO, frecuencia = list("Year" = 2009:2013, "Period" = 1:3), df1 ) -> A Agregar( formula = TIPO_NIVEL ~ ANO + PERIODO, frecuencia = list("Year" = 2009:2013, "Period" = 1:3), df1 ) -> B Agregar( formula = TIPO_NIVEL ~ ANO + PERIODO, frecuencia = list("Year" = 2009:2013, "Period" = 1:3), df1 ) -> C Agregar( formula = TIPO_NIVEL ~ ANO + PERIODO, frecuencia = list("Year" = 2009:2013, "Period" = 1:3), df1 ) -> D all.equal(C, D) G <- Agregar( formula = TIPO_NIVEL ~ ANO + PERIODO, frecuencia = list("Year" = 2009:2013, "Period" = 1:2), intervalo = list(c(2009, 1), c(2013, 1)), datos = df1 ) H <- Agregar( formula = TIPO_NIVEL ~ ANO + PERIODO, frecuencia = list("Year" = 2009:2013, "Period" = 1:2), datos = df1, ask = FALSE ) all.equal(G, H) # Observe las diferentes opciones que se le muestran por consola. Agregar(formula = SEXO ~ YEAR + PERIODO, frecuencia = list("Year" = 2016:2021, "Period" = 1:3), df2) Agregar( formula = SEXO ~ YEAR + PERIODO, frecuencia = list("Year" = 2016:2021, "Period" = 1:3), intervalo = list(c(2018, 1), c(2020, 3)), datos = df2 ) Agregar( formula = SEXO ~ YEAR, frecuencia = 2016:2021, intervalo = c(2018, 2020), datos = df2 ) # Observe que puede especificar más de una variable para realizar el agregado # Se harán agregados simples y se unirán las filas en un único df df1$SEXO <- c("Hombre", NA, NA, NA, NA, "Hombre", "Hombre", "Mujer", NA, NA, "Hombre", "Mujer", "Hombre", "Mujer" ) Agregar( formula = TIPO_NIVEL + SEXO ~ ANO + PERIODO, frecuencia = list("Year" = 2010:2013, "Period" = 1:2), intervalo = list(c(2010, 1), c(2013, 2)), datos = df1 ) -> A Agregar( formula = TIPO_NIVEL + SEXO ~ ANO + PERIODO, frecuencia = list("Year" = 2010:2013, "Period" = 1:2), datos = df1 ) -> B
Consolidado de la población de graduados de los programas académicos en la Universidad Nacional de Colombia, cuenta con la información histórica desde el 2009-I al 2021-I.
ejConsolidadoGrad
ejConsolidadoGrad
Un data frame (data.frame, tbl_df o tbl) con 775 filas y 5 columnas: 'Variable', 'YEAR', 'SEMESTRE', 'Clase', 'Total'.
Para obtener más detalle de los metadatos consulte aquí.
# library(dplyr) head(ejConsolidadoGrad)
# library(dplyr) head(ejConsolidadoGrad)
Consolidado de ejemplo de la prueba Saber Pro (antes llamada ECAES) del año
2019. El cual se utiliza para los ejemplos de la función Tabla.SaberPro()
.
ejConsolidadoSaberPro2019
ejConsolidadoSaberPro2019
Un data frame (data.frame, tbl_df o tbl) con 42 filas y 7 columnas: 'Variable', 'YEAR', 'Clase', 'n', 'Componente', 'Total', 'desv'.
Para obtener más detalle de los metadatos consulte aquí.
# library(dplyr) head(ejConsolidadoSaberPro2019)
# library(dplyr) head(ejConsolidadoSaberPro2019)
Muestra de microdatos de la población de graduados de los programas académicos
en la Universidad Nacional de Colombia, se cuenta con una muestra de la información
disponible (del 2019-I al 2021-I). Dicho dataset será usado en los ejemplos
de las funciones Tabla.General()
y Plot.Treemap()
.
ejGraduados
ejGraduados
Un data frame (data.frame, tbl_df o tbl) con 27.830 filas y 53 columnas: 'YEAR', 'SEMESTRE', 'TIPO_NIVEL', 'NIVEL', 'DEP_NAC', 'COD_DEP_NAC', 'CIU_NAC', 'COD_CIU_NAC', 'LON_CIU_NAC', 'LAT_CIU_NAC', 'DEP_PROC', 'COD_DEP_PROC', 'CIU_PROC', 'COD_CIU_PROC', 'LON_CIU_PROC', 'LAT_CIU_PROC', 'CODS_NAC', 'CODN_NAC', 'NACIONALIDAD', 'EDAD_MOD', 'CAT_EDAD', 'SEXO', 'ESTRATO_ORIG', 'ESTRATO', 'TIPO_COL', 'PBM_ORIG', 'PBM', 'MAT_PVEZ', 'DISCAPACIDAD', 'TIPO_DISC', 'SNIES_SEDE_ADM', 'SEDE_NOMBRE_ADM', 'SNIES_SEDE_MAT', 'SEDE_NOMBRE_MAT', 'ADM_PEAMA_ANDINA', 'MOD_ADM', 'TIPO_ADM', 'PAES', 'PEAMA', 'MOV_PEAMA', 'CONVENIO', 'TIP_CONVENIO', 'SNIESU_CONVENIO', 'U_CONVENIO', 'FACULTAD', 'FACULTAD_S', 'SNIES_PROGRA', 'PROGRAMA', 'PROGRAMA_S', 'AREAC_SNIES', 'CA_CINE', 'CD_CINE', 'AREA_CINE'.
Para obtener más detalle de los metadatos consulte aquí.
# library(dplyr) ejGraduados[1:5, 1:10]
# library(dplyr) ejGraduados[1:5, 1:10]
Muestra de los microdatos (únicamente estudiantes de pregrado) de la población
de aspirantes a cursar estudios de pregrado o postgrado en la Universidad
Nacional de Colombia inscritos a través de convocatoria pública de manera regular
o por medio de los programas de admisión especial existentes. Dicho dataset
será usado en los ejemplos de la función Plot.Boxplot()
.
ejMiniAspirantesPre
ejMiniAspirantesPre
Un data frame (data.frame, tbl_df o tbl) con 30.050 filas y 6 columnas: 'Serie', 'PTOTAL', 'TIPO_INS', 'INS_SEDE_NOMBRE', 'ADM_SEDE_NOMBRE', 'FACULTAD'.
Para obtener más detalle de los metadatos consulte aquí.
# library(dplyr) head(ejMiniAspirantesPre)
# library(dplyr) head(ejMiniAspirantesPre)
Mini consolidado de la población de aspirantes a cursar estudios de pregrado
o postgrado en la Universidad Nacional de Colombia inscritos a través de
convocatoria pública de manera regular o por medio de los programas de admisión
especial existentes -sólo pregrado-. Dicho dataset será usado en los ejemplos
de la función Plot.Drilldown()
.
ejMiniConsolidadoAsp
ejMiniConsolidadoAsp
Un data frame (data.frame, tbl_df o tbl) con 308 filas y 5 columnas: 'Variable', 'YEAR', 'SEMESTRE', 'Clase', 'Total'.
Para obtener más detalle de los metadatos consulte aquí.
# library(dplyr) head(ejMiniConsolidadoAsp)
# library(dplyr) head(ejMiniConsolidadoAsp)
Microdatos de los resultados de la prueba Saber Pro del año 2020, obtenidos
desde la página del ICFES, los cuales serán usados para los ejemplos de las
funciones Plot.Boxplot()
y Plot.Radar()
.
ejSaberPro2020
ejSaberPro2020
Un data frame (data.frame, tbl_df o tbl) con 4.896 filas y 59 columnas: 'YEAR', 'SEMESTRE', 'YEAR_MAT', 'SEMESTRE_MAT', 'TIPO_NIVEL', 'NIVEL', 'DEP_NAC', 'COD_DEP_NAC', 'CIU_NAC', 'COD_CIU_NAC', 'LON_CIU_NAC', 'LAT_CIU_NAC', 'DEP_PROC', 'COD_DEP_PROC', 'CIU_PROC', 'COD_CIU_PROC', 'LON_CIU_PROC', 'LAT_CIU_PROC', 'CODS_NAC', 'CODN_NAC', 'NACIONALIDAD', 'EDAD_MOD', 'CAT_EDAD', 'SEXO', 'ESTRATO_ORIG', 'ESTRATO', 'TIPO_COL', 'PBM_ORIG', 'PBM', 'SNIES_SEDE_ADM', 'SEDE_NOMBRE_ADM', 'SNIES_SEDE_MAT', 'SEDE_NOMBRE_MAT', 'ADM_PEAMA_ANDINA', 'MOD_ADM', 'TIPO_ADM', 'PAES', 'PEAMA', 'FACULTAD', 'FACULTAD_S', 'SNIES_PROGRA', 'PROGRAMA', 'PROGRAMA_S', 'AREAC_SNIES', 'CA_CINE', 'CD_CINE', 'AREA_CINE', 'SNP', 'PUNTAJE_GLOBAL', 'PUNT_COMP_CIUD', 'NIVEL_COMP_CIUD', 'PUNT_COMU_ESCR', 'NIVEL_COMU_ESCR', 'PUNT_INGLES', 'NIVEL_INGLES', 'PUNT_LECT_CRIT', 'NIVEL_LECT_CRIT', 'PUNT_RAZO_CUANT', 'NIVEL_RAZO_CUANT'.
Para obtener más detalle de los metadatos consulte aquí.
# library(dplyr) ejSaberPro2020[1:5, 1:10]
# library(dplyr) ejSaberPro2020[1:5, 1:10]
Esta función proporciona excelentes herramientas y opciones para la visualización
de un gráfico de barras apiladas con el objetivo de mostrar el tamaño relativo
(como porcentaje) de una variable categórica, subdivididas por colores en
función de un subgrupo. Dicha gráfica se va a representar usando la librería
Highcharter
, la cual usa internamente JavaScript
.
Plot.Apiladas( datos, ejeX, valores, categoria, ano, periodo, addPeriodo = FALSE, colores, titulo = "", libreria = c("highcharter", "plotly"), estilo = NULL, estatico = FALSE )
Plot.Apiladas( datos, ejeX, valores, categoria, ano, periodo, addPeriodo = FALSE, colores, titulo = "", libreria = c("highcharter", "plotly"), estilo = NULL, estatico = FALSE )
datos |
Un data frame, no un vector numérico. |
ejeX |
Una variable categórica dentro del data frame ingresado en |
valores |
Variable numérica que contiene los valores que desea graficar. |
categoria |
Una variable categórica dentro del data frame ingresado en |
ano |
Argument deprecated. This Argument still exist but will be removed in the next version. |
periodo |
Argument deprecated. This Argument still exist but will be removed in the next version. |
addPeriodo |
Argument deprecated. This Argument still exist but will be removed in the next version. |
colores |
Cadena de caracteres indicando los colores con los cuales se
deben colorear cada una de las series correspondiente a cada nivel del
argumento |
titulo |
Cadena de caracteres indicando el título principal del plot. |
libreria |
Cadena de caracteres que indica el paquete con el cual se realizará
el plot. Los valores permitidos son |
estilo |
Lista compuesta por varios parámetros, los cuales van a ser usados para graficar las barras apiladas y cuyo objetivo es personalizar pequeños detalles de éste.
|
estatico |
Si es |
Retorna el diagrama de barras apiladas (objeto widget de HTML) creado. La clase del objeto retornado será un "htmlwidget" y adicionalmente pertenecerá a la clase "highchart".
Sabemos que puede ser abrumador el número de argumentos dentro del parámetro
estilo
, pero es necesario si queremos ofrecer al usuario la máxima
personalización dentro de cada función usando cualquier librería. Por tal
razón, a continuación, se detalla el listado completo de argumentos, usados
al especificar la librería y en qué función están presentes
(marcado con una × si lo posee).
Librería | estilo$ | Plot.Series() |
Plot.Barras() |
Plot.Apiladas() |
Plot.Boxplot() |
Plot.Radar() |
Plot.Treemap() |
Plot.Torta() |
Plot.Drilldown() |
— | gg.Tema | × | × | × | × | ||||
l | gg.Texto | × | × | × | × | ||||
l | gg.Legend | × | × | × | |||||
l | gg.Linea | × | |||||||
l | gg.Punto | × | |||||||
l | gg.Bar | × | × | ||||||
l | gg.VarWidth | × | |||||||
l | gg.OutShape | × | |||||||
l | gg.JitWidth | × | |||||||
l | gg.JitSize | × | |||||||
l | gg.Range | × | |||||||
ggplot2 | gg.plty | × | |||||||
l | gg.plwd | × | |||||||
l | gg.cglwd | × | |||||||
l | gg.cglcol | × | |||||||
l | gg.fontsize.title | × | |||||||
l | gg.fontsize.labels | × | |||||||
l | gg.fontcolor.labels | × | |||||||
l | gg.border.lwds | × | |||||||
l | gg.border.col | × | |||||||
l | gg.lowerbound.cex.labels | × | |||||||
l | gg.force.print.labels | × | |||||||
— | gg.overlap.labels | × | |||||||
» | hc.Tema | × | × | × | × | × | × | × | |
l | hc.Credits | × | × | × | × | × | × | × | |
highcharter | hc.BoxInfo | × | |||||||
l | hc.Slider | × | |||||||
» | hc.borderRadius | × | |||||||
• | ply.Credits | × | × | × | × | × | × | × | |
° | ply.Legend | × | × | ||||||
° | ply.LegendPosition | × | × | × | × | ||||
plotly | ply.Interaction | × | × | ||||||
° | ply.Relleno | × | |||||||
° | ply.Opacidad | × | × | ||||||
• | ply.LegendTitle | × | |||||||
dygraphs | dyg.LegendWidth | × | |||||||
» | dyg.Resaltar | × | |||||||
— | e.Tema | × | |||||||
l | e.Credits | × | |||||||
echarts4r | e.Forma | × | |||||||
l | e.LegType | × | |||||||
— | e.LegLoc | × | |||||||
# Ejemplo generalizado (sin uso de un consolidado como input) # library("tibble"); library("dplyr") set.seed(42) Blood <- tibble( Quarter = sample(c("I", "II", "III", "IV"), size = 200, replace = TRUE), Group = sample( c("O", "A", "B", "AB"), size = 200, prob = c(.5, .3, .16, .4), replace = TRUE ), Prevalence = round(runif(200)*100) ) Plot.Apiladas( datos = Blood , ejeX = Quarter , valores = Prevalence, categoria = Group , colores = c("#FF553D", "#A5FF67", "#40D2FF", "#FFDB5C") ) # --------------------------------------------------------------------------- Txt <- "BARRAS APILADAS EN FUNCI\u00d3N DEL NIVEL ACAD\u00c9MICO Y EL A\u00d1O" Msj <- paste( "Se considera \u00fanicamente los valores obtenidos en el primer periodo", "acad\u00e9mico de cada a\u00f1o." ) Plot.Apiladas( datos = ejConsolidadoGrad |> filter(YEAR %in% c(2018:2020), SEMESTRE == 1), categoria = "NIVEL", # Pruebe también con alguna de -> unique(ejConsolidadoGrad$Variable) colores = c("#FFA700", "#C10AA1", "#01CDFE", "#00FF44", "#FF0040"), titulo = Txt, estilo = list(LegendTitle = "NIVEL ACAD\u00c9MICO:", hc.Tema = 4, hc.Credits = Msj) ) Plot.Apiladas( datos = ejConsolidadoGrad |> filter(YEAR %in% c(2018:2020), SEMESTRE == 1), categoria = "AREAC_SNIES", colores = c("#D2D4DC", "#FF8ABF", "#945BC2", "#D11879", "#FF7F7F", "#FFA568", "#9CFF86", "#89D8FF"), titulo = "BARRAS APILADAS EN FUNCI\u00d3N DEL \u00c1REA DEL SNIES", libreria = "plotly", estilo = list( LegendTitle = "NIVEL ACAD\u00c9MICO:", ply.Credits = list(x = 0.5, y = 1.5, text = gsub("l p", "l\np", Msj)), ply.LegendPosition = list(x = 0.04, y = -0.3, orientation = "h") ) ) # Ejemplo usando el caso estático (ggplot2) Plot.Apiladas( datos = ejConsolidadoGrad |> filter(YEAR %in% c(2019:2021), SEMESTRE == 1), categoria = "NIVEL", colores = c("#FFA700", "#C10AA1", "#01CDFE", "#00FF44", "#FF0040"), titulo = gsub("L AC", "L\nAC", Txt), estatico = TRUE, estilo = list( LegendTitle = "NIVEL ACAD\u00c9MICO:", gg.Tema = 8, gg.Legend = list(legend.position = "right", legend.direction = "vertical"), gg.Bar = list(width = 0.6, color = "#000000"), gg.Texto = list( subtitle = "\u00bb\u00bb\u00bb", tag = "\u00ae", caption = "Informaci\u00f3n Disponible desde 2009-1" ) ) )
# Ejemplo generalizado (sin uso de un consolidado como input) # library("tibble"); library("dplyr") set.seed(42) Blood <- tibble( Quarter = sample(c("I", "II", "III", "IV"), size = 200, replace = TRUE), Group = sample( c("O", "A", "B", "AB"), size = 200, prob = c(.5, .3, .16, .4), replace = TRUE ), Prevalence = round(runif(200)*100) ) Plot.Apiladas( datos = Blood , ejeX = Quarter , valores = Prevalence, categoria = Group , colores = c("#FF553D", "#A5FF67", "#40D2FF", "#FFDB5C") ) # --------------------------------------------------------------------------- Txt <- "BARRAS APILADAS EN FUNCI\u00d3N DEL NIVEL ACAD\u00c9MICO Y EL A\u00d1O" Msj <- paste( "Se considera \u00fanicamente los valores obtenidos en el primer periodo", "acad\u00e9mico de cada a\u00f1o." ) Plot.Apiladas( datos = ejConsolidadoGrad |> filter(YEAR %in% c(2018:2020), SEMESTRE == 1), categoria = "NIVEL", # Pruebe también con alguna de -> unique(ejConsolidadoGrad$Variable) colores = c("#FFA700", "#C10AA1", "#01CDFE", "#00FF44", "#FF0040"), titulo = Txt, estilo = list(LegendTitle = "NIVEL ACAD\u00c9MICO:", hc.Tema = 4, hc.Credits = Msj) ) Plot.Apiladas( datos = ejConsolidadoGrad |> filter(YEAR %in% c(2018:2020), SEMESTRE == 1), categoria = "AREAC_SNIES", colores = c("#D2D4DC", "#FF8ABF", "#945BC2", "#D11879", "#FF7F7F", "#FFA568", "#9CFF86", "#89D8FF"), titulo = "BARRAS APILADAS EN FUNCI\u00d3N DEL \u00c1REA DEL SNIES", libreria = "plotly", estilo = list( LegendTitle = "NIVEL ACAD\u00c9MICO:", ply.Credits = list(x = 0.5, y = 1.5, text = gsub("l p", "l\np", Msj)), ply.LegendPosition = list(x = 0.04, y = -0.3, orientation = "h") ) ) # Ejemplo usando el caso estático (ggplot2) Plot.Apiladas( datos = ejConsolidadoGrad |> filter(YEAR %in% c(2019:2021), SEMESTRE == 1), categoria = "NIVEL", colores = c("#FFA700", "#C10AA1", "#01CDFE", "#00FF44", "#FF0040"), titulo = gsub("L AC", "L\nAC", Txt), estatico = TRUE, estilo = list( LegendTitle = "NIVEL ACAD\u00c9MICO:", gg.Tema = 8, gg.Legend = list(legend.position = "right", legend.direction = "vertical"), gg.Bar = list(width = 0.6, color = "#000000"), gg.Texto = list( subtitle = "\u00bb\u00bb\u00bb", tag = "\u00ae", caption = "Informaci\u00f3n Disponible desde 2009-1" ) ) )
Esta función permite mostrar de forma interactiva (y estática) un gráfico
de barras verticales u horizontales cuya altura/longitud es proporcional al
valor de la variable (categorías de una variable cualitativa), lo anterior
para ayudar a la creación de informes descriptivos y analíticos. Dicho diagrama
se puede representar usando dos diferentes librerías que son Highcharter
y
Plotly
, las cuales usan internamente JavaScript
.
Plot.Barras( datos, valores, categoria, ano, periodo, freqRelativa = FALSE, ylim, vertical = TRUE, ordinal = FALSE, colores, titulo = "", labelX = "", labelY = "Número de", labelEje, addPeriodo = FALSE, textInfo = labelY, libreria = c("highcharter", "plotly"), estilo = NULL, estatico = FALSE )
Plot.Barras( datos, valores, categoria, ano, periodo, freqRelativa = FALSE, ylim, vertical = TRUE, ordinal = FALSE, colores, titulo = "", labelX = "", labelY = "Número de", labelEje, addPeriodo = FALSE, textInfo = labelY, libreria = c("highcharter", "plotly"), estilo = NULL, estatico = FALSE )
datos |
Un data frame, no un vector numérico. |
valores |
Variable numérica que contiene los valores que desea graficar. |
categoria |
Una variable categórica dentro del data frame ingresado en |
ano |
Argument deprecated. This Argument still exist but will be removed in the next version. |
periodo |
Argument deprecated. This Argument still exist but will be removed in the next version. |
freqRelativa |
Si es |
ylim |
Vector numérico que especifica el límite inferior y superior,
respectivamente, del eje |
vertical |
Si es |
ordinal |
Si es |
colores |
Cadena de caracteres indicando los colores con los cuales se
deben colorear cada una de las series correspondiente a cada nivel del
argumento |
titulo |
Cadena de caracteres indicando el título principal del plot. |
labelX |
Cadena de caracteres indicando la etiqueta del eje |
labelY |
Cadena de caracteres indicando la etiqueta del eje |
labelEje |
Cadena de caracteres indicando la etiqueta del eje |
addPeriodo |
Argument deprecated. This Argument still exist but will be removed in the next version. |
textInfo |
Cadena de caracteres que especifica el texto que se escribe
dentro de la caja de información al posar el cursor en alguna barra en el
gráfico, producido por |
libreria |
Cadena de caracteres que indica el paquete con el cual se realizará
el plot. Los valores permitidos son |
estilo |
Lista compuesta por varios parámetros, los cuales van a ser usados de acuerdo con la librería especificada para graficar el plot y cuyo objetivo es personalizar pequeños detalles de ésta.
|
estatico |
Si es |
Al usar el paquete Highcharter
y usar las opciones de descarga, el nombre
del archivo descargado será la concatenación del plot graficado y la categoría
usada, así, por ejemplo, si se graficó el diagrama de barras para la categoría
"Nacionalidad" el nombre será PlotBarras_Nacionalidad.png
.
Retorna el diagrama de barras (objeto widget de HTML) creado. La clase del objeto retornado será un "htmlwidget" y dependiendo de la librería usada pertenecerá adicionalmente a la clase "highchart" o "plotly".
Sabemos que puede ser abrumador el número de argumentos dentro del parámetro
estilo
, pero es necesario si queremos ofrecer al usuario la máxima
personalización dentro de cada función usando cualquier librería. Por tal
razón, a continuación, se detalla el listado completo de argumentos, usados
al especificar la librería y en qué función están presentes
(marcado con una × si lo posee).
Librería | estilo$ | Plot.Series() |
Plot.Barras() |
Plot.Apiladas() |
Plot.Boxplot() |
Plot.Radar() |
Plot.Treemap() |
Plot.Torta() |
Plot.Drilldown() |
— | gg.Tema | × | × | × | × | ||||
l | gg.Texto | × | × | × | × | ||||
l | gg.Legend | × | × | × | |||||
l | gg.Linea | × | |||||||
l | gg.Punto | × | |||||||
l | gg.Bar | × | × | ||||||
l | gg.VarWidth | × | |||||||
l | gg.OutShape | × | |||||||
l | gg.JitWidth | × | |||||||
l | gg.JitSize | × | |||||||
l | gg.Range | × | |||||||
ggplot2 | gg.plty | × | |||||||
l | gg.plwd | × | |||||||
l | gg.cglwd | × | |||||||
l | gg.cglcol | × | |||||||
l | gg.fontsize.title | × | |||||||
l | gg.fontsize.labels | × | |||||||
l | gg.fontcolor.labels | × | |||||||
l | gg.border.lwds | × | |||||||
l | gg.border.col | × | |||||||
l | gg.lowerbound.cex.labels | × | |||||||
l | gg.force.print.labels | × | |||||||
— | gg.overlap.labels | × | |||||||
» | hc.Tema | × | × | × | × | × | × | × | |
l | hc.Credits | × | × | × | × | × | × | × | |
highcharter | hc.BoxInfo | × | |||||||
l | hc.Slider | × | |||||||
» | hc.borderRadius | × | |||||||
• | ply.Credits | × | × | × | × | × | × | × | |
° | ply.Legend | × | × | ||||||
° | ply.LegendPosition | × | × | × | × | ||||
plotly | ply.Interaction | × | × | ||||||
° | ply.Relleno | × | |||||||
° | ply.Opacidad | × | × | ||||||
• | ply.LegendTitle | × | |||||||
dygraphs | dyg.LegendWidth | × | |||||||
» | dyg.Resaltar | × | |||||||
— | e.Tema | × | |||||||
l | e.Credits | × | |||||||
echarts4r | e.Forma | × | |||||||
l | e.LegType | × | |||||||
— | e.LegLoc | × | |||||||
# Ejemplo generalizado (sin uso de un consolidado como input) # library("tibble"); library("dplyr") set.seed(42) Blood <- tibble( Group = sample(c("O", "A", "B", "AB"), size = 200, prob = c(0.5, 0.3, 0.16, 0.4), replace = TRUE), RH = sample(c("+", "-"), size = 200, replace = TRUE), Prevalence = round(runif(200)*100) ) Plot.Barras( datos = Blood , valores = Prevalence, categoria = Group , ordinal = TRUE , colores = c("#FF553D", "#A5FF67", "#40D2FF", "#FFDB5C"), labelY = "Prevalence" ) Plot.Barras( datos = Blood , valores = Prevalence, categoria = Group , colores = c("#FF553D", "#A5FF67", "#40D2FF", "#FFDB5C"), labelY = "Prevalence", libreria = "plotly" ) # --------------------------------------------------------------------------- Msj <- "Ac\u00e1 puede ir m\u00e1s informaci\u00f3n acerca del gr\u00e1fico." Plot.Barras( datos = ejConsolidadoGrad |> filter(YEAR==2021, SEMESTRE==1), categoria = "NIVEL", freqRelativa = TRUE, vertical = TRUE, ordinal = TRUE, colores = c("#D7191C", "#FDAE61", "#FFFFBF", "#ABDDA4", "#2B83BA"), titulo = "GRADUADOS DE ACUERDO CON EL NIVEL DE FORMACI\u00d3N (Periodo 2021-1)", labelY = "Frecuencia Relativa<br>(% de graduados)", textInfo = "Porcentaje de Graduados", libreria = "highcharter", estilo = list(hc.Tema = 2, hc.Credits = Msj) ) # --------------------------------------------------------------------------- Txt <- "DISTRIBUCI\u00d3N DEL N\u00daMERO DE GRADUADOS POR NIVEL" Msj <- "A\u00f1o 2020, sin segregar por semestre (considerando ambos)." Plot.Barras( datos = ejConsolidadoGrad |> filter(YEAR == 2020), categoria = "NIVEL", vertical = FALSE, ordinal = FALSE, colores = c("#66C2A5", "#FC8D62", "#8DA0CB", "#E78AC3", "#A6D854"), titulo = Txt, labelY = "N\u00famero de Graduados", libreria = "plotly", estilo = list( ply.Credits = list(x = 0.45, y = 1.1, text = Msj), ply.Legend = FALSE ) ) # --------------------------------------------------------------------------- # Ejemplo usando el caso estático (ggplot2) Plot.Barras( datos = ejConsolidadoGrad |> filter(YEAR == 2020), categoria = "NIVEL", vertical = FALSE, ordinal = FALSE, colores = c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00"), titulo = gsub("DE GR", "DE\nGR", Txt), labelY = "N\u00famero de Graduados", estatico = TRUE, estilo = list( gg.Tema = 10, gg.Bar = list(width = 0.2, color = "#000000"), gg.Texto = list(subtitle = gsub("A", "\nA", Msj), caption = "Informaci\u00f3n Disponible desde 2009-1", tag = "\u00ae" ) ) )
# Ejemplo generalizado (sin uso de un consolidado como input) # library("tibble"); library("dplyr") set.seed(42) Blood <- tibble( Group = sample(c("O", "A", "B", "AB"), size = 200, prob = c(0.5, 0.3, 0.16, 0.4), replace = TRUE), RH = sample(c("+", "-"), size = 200, replace = TRUE), Prevalence = round(runif(200)*100) ) Plot.Barras( datos = Blood , valores = Prevalence, categoria = Group , ordinal = TRUE , colores = c("#FF553D", "#A5FF67", "#40D2FF", "#FFDB5C"), labelY = "Prevalence" ) Plot.Barras( datos = Blood , valores = Prevalence, categoria = Group , colores = c("#FF553D", "#A5FF67", "#40D2FF", "#FFDB5C"), labelY = "Prevalence", libreria = "plotly" ) # --------------------------------------------------------------------------- Msj <- "Ac\u00e1 puede ir m\u00e1s informaci\u00f3n acerca del gr\u00e1fico." Plot.Barras( datos = ejConsolidadoGrad |> filter(YEAR==2021, SEMESTRE==1), categoria = "NIVEL", freqRelativa = TRUE, vertical = TRUE, ordinal = TRUE, colores = c("#D7191C", "#FDAE61", "#FFFFBF", "#ABDDA4", "#2B83BA"), titulo = "GRADUADOS DE ACUERDO CON EL NIVEL DE FORMACI\u00d3N (Periodo 2021-1)", labelY = "Frecuencia Relativa<br>(% de graduados)", textInfo = "Porcentaje de Graduados", libreria = "highcharter", estilo = list(hc.Tema = 2, hc.Credits = Msj) ) # --------------------------------------------------------------------------- Txt <- "DISTRIBUCI\u00d3N DEL N\u00daMERO DE GRADUADOS POR NIVEL" Msj <- "A\u00f1o 2020, sin segregar por semestre (considerando ambos)." Plot.Barras( datos = ejConsolidadoGrad |> filter(YEAR == 2020), categoria = "NIVEL", vertical = FALSE, ordinal = FALSE, colores = c("#66C2A5", "#FC8D62", "#8DA0CB", "#E78AC3", "#A6D854"), titulo = Txt, labelY = "N\u00famero de Graduados", libreria = "plotly", estilo = list( ply.Credits = list(x = 0.45, y = 1.1, text = Msj), ply.Legend = FALSE ) ) # --------------------------------------------------------------------------- # Ejemplo usando el caso estático (ggplot2) Plot.Barras( datos = ejConsolidadoGrad |> filter(YEAR == 2020), categoria = "NIVEL", vertical = FALSE, ordinal = FALSE, colores = c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00"), titulo = gsub("DE GR", "DE\nGR", Txt), labelY = "N\u00famero de Graduados", estatico = TRUE, estilo = list( gg.Tema = 10, gg.Bar = list(width = 0.2, color = "#000000"), gg.Texto = list(subtitle = gsub("A", "\nA", Msj), caption = "Informaci\u00f3n Disponible desde 2009-1", tag = "\u00ae" ) ) )
Esta función proporciona excelentes herramientas y opciones para la visualización
de un diagrama de caja y bigotes (también conocido como boxplot) dinámico
con el objetivo de representar gráficamente una serie numérica a través de sus
cuantiles. Dicho boxplot se puede representar usando dos diferentes librerías
que son Highcharter
y Plotly
, las cuales usan internamente JavaScript
.
Plot.Boxplot( datos, variable, grupo1, grupo2, vertical = TRUE, outliers = TRUE, jitter = FALSE, violin = FALSE, numericalVars, ylim, colores, sizeOutlier = 0, colOutlier = "#08306B", titulo = "", labelX = "Periodo", labelY = "", textBox = "", libreria = c("highcharter", "plotly"), estilo = NULL, estatico = FALSE )
Plot.Boxplot( datos, variable, grupo1, grupo2, vertical = TRUE, outliers = TRUE, jitter = FALSE, violin = FALSE, numericalVars, ylim, colores, sizeOutlier = 0, colOutlier = "#08306B", titulo = "", labelX = "Periodo", labelY = "", textBox = "", libreria = c("highcharter", "plotly"), estilo = NULL, estatico = FALSE )
datos |
Un data frame, no un vector numérico. |
variable |
Una variable numérica dentro del data frame ingresado en |
grupo1 |
Una variable categórica dentro del data frame ingresado en |
grupo2 |
Otra variable categórica dentro del data frame ingresado en |
vertical |
Si es |
outliers |
Si es |
jitter |
Si es |
violin |
Si es |
numericalVars |
Una lista (ya sea creada con la sintaxis |
ylim |
Vector numérico que especifica el límite inferior y superior,
respectivamente, del eje |
colores |
Cadena de caracteres indicando los colores con los cuales se
deben colorear cada una de las trazas correspondiente a cada nivel del argumento
|
sizeOutlier |
Valor numérico que indica el tamaño de los puntos considerados como atípicos, por defecto se tiene un valor específico al que se le sumará el ingresado acá. |
colOutlier |
Cadena de caracteres indicando el color de los puntos considerados como atípicos, por defecto se pintarán de un azul rey. |
titulo |
Cadena de caracteres indicando el título principal del plot. |
labelX |
Cadena de caracteres indicando la etiqueta del eje |
labelY |
Cadena de caracteres indicando la etiqueta del eje |
textBox |
Cadena de caracteres indicando el nombre de la serie numérica
con la que se construye las cajas, necesario únicamente si se especifica
solamente el |
libreria |
Cadena de caracteres que indica el paquete con el cual se realizará
el plot. Los valores permitidos son |
estilo |
Lista compuesta por varios parámetros, los cuales van a ser usados de acuerdo con la librería especificada para graficar el boxplot y cuyo objetivo es personalizar pequeños detalles de éste.
|
estatico |
Si es |
El argumento numericalVars
funciona solamente con la librería "plotly"
,
pues la función de crear los botones dinámicos es procedente de dicha librería.
Retorna el boxplot (objeto widget de HTML) creado. La clase del objeto retornado será un "htmlwidget" y dependiendo de la librería usada pertenecerá adicionalmente a la clase "highchart" o "plotly".
Sabemos que puede ser abrumador el número de argumentos dentro del parámetro
estilo
, pero es necesario si queremos ofrecer al usuario la máxima
personalización dentro de cada función usando cualquier librería. Por tal
razón, a continuación, se detalla el listado completo de argumentos, usados
al especificar la librería y en qué función están presentes
(marcado con una × si lo posee).
Librería | estilo$ | Plot.Series() |
Plot.Barras() |
Plot.Apiladas() |
Plot.Boxplot() |
Plot.Radar() |
Plot.Treemap() |
Plot.Torta() |
Plot.Drilldown() |
— | gg.Tema | × | × | × | × | ||||
l | gg.Texto | × | × | × | × | ||||
l | gg.Legend | × | × | × | |||||
l | gg.Linea | × | |||||||
l | gg.Punto | × | |||||||
l | gg.Bar | × | × | ||||||
l | gg.VarWidth | × | |||||||
l | gg.OutShape | × | |||||||
l | gg.JitWidth | × | |||||||
l | gg.JitSize | × | |||||||
l | gg.Range | × | |||||||
ggplot2 | gg.plty | × | |||||||
l | gg.plwd | × | |||||||
l | gg.cglwd | × | |||||||
l | gg.cglcol | × | |||||||
l | gg.fontsize.title | × | |||||||
l | gg.fontsize.labels | × | |||||||
l | gg.fontcolor.labels | × | |||||||
l | gg.border.lwds | × | |||||||
l | gg.border.col | × | |||||||
l | gg.lowerbound.cex.labels | × | |||||||
l | gg.force.print.labels | × | |||||||
— | gg.overlap.labels | × | |||||||
» | hc.Tema | × | × | × | × | × | × | × | |
l | hc.Credits | × | × | × | × | × | × | × | |
highcharter | hc.BoxInfo | × | |||||||
l | hc.Slider | × | |||||||
» | hc.borderRadius | × | |||||||
• | ply.Credits | × | × | × | × | × | × | × | |
° | ply.Legend | × | × | ||||||
° | ply.LegendPosition | × | × | × | × | ||||
plotly | ply.Interaction | × | × | ||||||
° | ply.Relleno | × | |||||||
° | ply.Opacidad | × | × | ||||||
• | ply.LegendTitle | × | |||||||
dygraphs | dyg.LegendWidth | × | |||||||
» | dyg.Resaltar | × | |||||||
— | e.Tema | × | |||||||
l | e.Credits | × | |||||||
echarts4r | e.Forma | × | |||||||
l | e.LegType | × | |||||||
— | e.LegLoc | × | |||||||
Txt <- "EVOLUCI\u00d3N DEL PUNTAJE EN EL EXAMEN DE ADMISI\u00d3N" Msj <- "Aspirantes a pregrado (<i>no se incluye los datos at\u00edpicos</i>)" Plot.Boxplot( datos = ejMiniAspirantesPre, variable = PTOTAL, grupo1 = Serie, outliers = FALSE, ylim = c(0, 1000), colores = pals::jet(30), sizeOutlier = 1, colOutlier = "#FF3366", titulo = Txt, labelY = "Puntaje", textBox = "Score", libreria = "highcharter", estilo = list(hc.Tema = 2, hc.Credits = Msj) ) # --------------------------------------------------------------------------- Msj2 <- paste( "Aspirantes a pregrado", "(<i>cada periodo se encuentra segregado por el tipo de admisi\u00f3n</i>)" ) Plot.Boxplot( datos = ejMiniAspirantesPre, variable = PTOTAL, grupo1 = Serie, grupo2 = TIPO_INS, outliers = TRUE, ylim = c(0, 1000), colores = c("#00ABFF", "#F3224B", "#FCD116", "#29DF2C"), titulo = Txt, labelY = "Puntaje", libreria = "highcharter", estilo = list(LegendTitle = "Programa:", hc.Tema = 6, hc.Credits = Msj2) ) # --------------------------------------------------------------------------- Plot.Boxplot( datos = iris, variable = Sepal.Length, grupo1 = Species, violin = TRUE, colores = c("#FF1D58", "#FDB911", "#00E527"), titulo = "BOXPLOT DE LA LONGITUD DEL S\u00c9PALO | IRIS DATASET", labelX = "Especie", labelY = "Longitud del S\u00e9palo", libreria = "plotly" ) # --------------------------------------------------------------------------- Plot.Boxplot( datos = ejMiniAspirantesPre, variable = PTOTAL, grupo1 = Serie, grupo2 = TIPO_INS, jitter = TRUE, ylim = c(0, 1000), colores = c("#00ABFF", "#F3224B", "#FCD116", "#29DF2C"), sizeOutlier = 0, colOutlier = "#D3D3D3", titulo = Txt, labelY = "Puntaje", libreria = "plotly", estilo = list( LegendTitle = "Programa:", ply.Interaction = "closest", ply.LegendPosition = list(x = 0.16, y = -0.25, orientation = "h"), ply.Credits = list(x = 0.4, y = 0.95, text = Msj2) ) ) -> Advertencia suppressWarnings(print(Advertencia)) # --------------------------------------------------------------------------- # library(dplyr) df <- ejSaberPro2020 |> select(SEDE_NOMBRE_ADM, PUNTAJE_GLOBAL, PUNT_RAZO_CUANT, PUNT_INGLES, PUNT_LECT_CRIT, PUNT_COMP_CIUD, PUNT_COMU_ESCR ) Numericas <- vars(PUNT_RAZO_CUANT, PUNT_INGLES, PUNT_LECT_CRIT, PUNT_COMP_CIUD, PUNT_COMU_ESCR) # Numericas <- c("PUNT_RAZO_CUANT", "PUNT_INGLES", ... , "PUNT_COMU_ESCR") misColores <- c( "#29ABE2", # AZUL CLARO | Amazonia "#8CC63F", # VERDE | Bogota "#CC241D", # ROJO | Caribe "#0071BC", # AZUL VIVO | Manizales "#F15A24", # NARANJA | Medellin "#FBB03B", # AMARILLO | Orinoquia "#93278F", # MORADO | Palmira "#8A381A" # GRIS | Tumaco ) Plot.Boxplot( datos = df, variable = PUNTAJE_GLOBAL, grupo1 = SEDE_NOMBRE_ADM, numericalVars = Numericas, colores = misColores, libreria = "plotly" ) # --------------------------------------------------------------------------- # Ejemplo usando el caso estático (ggplot2) # library(pals) Plot.Boxplot( datos = ejMiniAspirantesPre, variable = PTOTAL, grupo1 = Serie, jitter = TRUE, colores = pals::turbo(30), colOutlier = "#CBB8FF", titulo = gsub("L E", "L\nE", Txt), labelY = "Puntaje", textBox = "Score", estatico = TRUE, estilo = list( gg.Tema = 11, gg.Legend = list(legend.position = "none"), gg.Texto = list( subtitle = gsub("<|/|i>", "", Msj ), caption = "Información Disponible desde 2008-1", tag = "\u00ae" ), gg.VarWidth = TRUE, gg.JitWidth = 0.08, gg.JitSize = 0.05 ) ) # --------------------------------------------------------------------------- Plot.Boxplot( datos = ejMiniAspirantesPre, variable = PTOTAL, grupo1 = Serie, grupo2 = TIPO_INS, outliers = TRUE, colores = c("#00ABFF", "#F3224B", "#FCD116", "#29DF2C"), sizeOutlier = 2, colOutlier = "#F5E8E8", titulo = gsub("L E", "L\nE", Txt), labelY = "Puntaje", textBox = "Score", estatico = TRUE, estilo = list( LegendTitle = "NIVEL ACAD\u00c9MICO:", gg.Tema = 9, gg.OutShape = 21, gg.Legend = list(legend.position = "bottom", legend.direction = "horizontal"), gg.Texto = list( subtitle = gsub("<|/|i>", "", Msj2), caption = "Información Disponible desde 2008-1", tag = "\u00ae" ) ) )
Txt <- "EVOLUCI\u00d3N DEL PUNTAJE EN EL EXAMEN DE ADMISI\u00d3N" Msj <- "Aspirantes a pregrado (<i>no se incluye los datos at\u00edpicos</i>)" Plot.Boxplot( datos = ejMiniAspirantesPre, variable = PTOTAL, grupo1 = Serie, outliers = FALSE, ylim = c(0, 1000), colores = pals::jet(30), sizeOutlier = 1, colOutlier = "#FF3366", titulo = Txt, labelY = "Puntaje", textBox = "Score", libreria = "highcharter", estilo = list(hc.Tema = 2, hc.Credits = Msj) ) # --------------------------------------------------------------------------- Msj2 <- paste( "Aspirantes a pregrado", "(<i>cada periodo se encuentra segregado por el tipo de admisi\u00f3n</i>)" ) Plot.Boxplot( datos = ejMiniAspirantesPre, variable = PTOTAL, grupo1 = Serie, grupo2 = TIPO_INS, outliers = TRUE, ylim = c(0, 1000), colores = c("#00ABFF", "#F3224B", "#FCD116", "#29DF2C"), titulo = Txt, labelY = "Puntaje", libreria = "highcharter", estilo = list(LegendTitle = "Programa:", hc.Tema = 6, hc.Credits = Msj2) ) # --------------------------------------------------------------------------- Plot.Boxplot( datos = iris, variable = Sepal.Length, grupo1 = Species, violin = TRUE, colores = c("#FF1D58", "#FDB911", "#00E527"), titulo = "BOXPLOT DE LA LONGITUD DEL S\u00c9PALO | IRIS DATASET", labelX = "Especie", labelY = "Longitud del S\u00e9palo", libreria = "plotly" ) # --------------------------------------------------------------------------- Plot.Boxplot( datos = ejMiniAspirantesPre, variable = PTOTAL, grupo1 = Serie, grupo2 = TIPO_INS, jitter = TRUE, ylim = c(0, 1000), colores = c("#00ABFF", "#F3224B", "#FCD116", "#29DF2C"), sizeOutlier = 0, colOutlier = "#D3D3D3", titulo = Txt, labelY = "Puntaje", libreria = "plotly", estilo = list( LegendTitle = "Programa:", ply.Interaction = "closest", ply.LegendPosition = list(x = 0.16, y = -0.25, orientation = "h"), ply.Credits = list(x = 0.4, y = 0.95, text = Msj2) ) ) -> Advertencia suppressWarnings(print(Advertencia)) # --------------------------------------------------------------------------- # library(dplyr) df <- ejSaberPro2020 |> select(SEDE_NOMBRE_ADM, PUNTAJE_GLOBAL, PUNT_RAZO_CUANT, PUNT_INGLES, PUNT_LECT_CRIT, PUNT_COMP_CIUD, PUNT_COMU_ESCR ) Numericas <- vars(PUNT_RAZO_CUANT, PUNT_INGLES, PUNT_LECT_CRIT, PUNT_COMP_CIUD, PUNT_COMU_ESCR) # Numericas <- c("PUNT_RAZO_CUANT", "PUNT_INGLES", ... , "PUNT_COMU_ESCR") misColores <- c( "#29ABE2", # AZUL CLARO | Amazonia "#8CC63F", # VERDE | Bogota "#CC241D", # ROJO | Caribe "#0071BC", # AZUL VIVO | Manizales "#F15A24", # NARANJA | Medellin "#FBB03B", # AMARILLO | Orinoquia "#93278F", # MORADO | Palmira "#8A381A" # GRIS | Tumaco ) Plot.Boxplot( datos = df, variable = PUNTAJE_GLOBAL, grupo1 = SEDE_NOMBRE_ADM, numericalVars = Numericas, colores = misColores, libreria = "plotly" ) # --------------------------------------------------------------------------- # Ejemplo usando el caso estático (ggplot2) # library(pals) Plot.Boxplot( datos = ejMiniAspirantesPre, variable = PTOTAL, grupo1 = Serie, jitter = TRUE, colores = pals::turbo(30), colOutlier = "#CBB8FF", titulo = gsub("L E", "L\nE", Txt), labelY = "Puntaje", textBox = "Score", estatico = TRUE, estilo = list( gg.Tema = 11, gg.Legend = list(legend.position = "none"), gg.Texto = list( subtitle = gsub("<|/|i>", "", Msj ), caption = "Información Disponible desde 2008-1", tag = "\u00ae" ), gg.VarWidth = TRUE, gg.JitWidth = 0.08, gg.JitSize = 0.05 ) ) # --------------------------------------------------------------------------- Plot.Boxplot( datos = ejMiniAspirantesPre, variable = PTOTAL, grupo1 = Serie, grupo2 = TIPO_INS, outliers = TRUE, colores = c("#00ABFF", "#F3224B", "#FCD116", "#29DF2C"), sizeOutlier = 2, colOutlier = "#F5E8E8", titulo = gsub("L E", "L\nE", Txt), labelY = "Puntaje", textBox = "Score", estatico = TRUE, estilo = list( LegendTitle = "NIVEL ACAD\u00c9MICO:", gg.Tema = 9, gg.OutShape = 21, gg.Legend = list(legend.position = "bottom", legend.direction = "horizontal"), gg.Texto = list( subtitle = gsub("<|/|i>", "", Msj2), caption = "Información Disponible desde 2008-1", tag = "\u00ae" ) ) )
Esta función proporciona excelentes herramientas y opciones para la visualización
de un gráfico drill down con el objetivo de poder inspeccionar los datos con
mayor nivel de detalle, sin la necesidad de navegar o salir de él, pudiendo
hacer clic en diversos elementos como columnas o sectores circulares. Dicha
gráfica se va a representar usando la librería Highcharter
, la cual usa
internamente JavaScript
.
Plot.Drilldown( datos, varPrincipal, varSecundaria, ano, periodo, torta = TRUE, vertical = TRUE, colores, colores2, titulo = "", label = "", textInfo = "", addPeriodo = TRUE, estilo = NULL )
Plot.Drilldown( datos, varPrincipal, varSecundaria, ano, periodo, torta = TRUE, vertical = TRUE, colores, colores2, titulo = "", label = "", textInfo = "", addPeriodo = TRUE, estilo = NULL )
datos |
Un data frame, no un vector numérico. |
varPrincipal |
Una variable categórica dentro del data frame ingresado
en |
varSecundaria |
Otra variable categórica dentro del data frame ingresado
en |
ano |
Igual uso que en |
periodo |
Igual uso que en |
torta |
Si es |
vertical |
Si es |
colores |
Cadena de caracteres indicando los colores con los cuales se
deben colorear cada una de las trazas correspondiente a cada nivel del
argumento |
colores2 |
Igual que |
titulo |
Igual uso que en |
label |
Cadena de caracteres indicando el agregado al que hace referencia el gráfico. Por defecto no se emplea ningún rótulo. |
textInfo |
Cadena de caracteres indicando el texto que aparecerá dentro de la caja de información al pasar el mouse por las diferentes columnas del gráfico de barras. |
addPeriodo |
Igual uso que en |
estilo |
Lista compuesta por varios parámetros, los cuales van a ser usados para graficar el drill down y cuyo objetivo es personalizar pequeños detalles de éste.
|
Retorna el diagrama drill down (objeto widget de HTML) creado. La clase del objeto retornado será un "htmlwidget" y adicionalmente pertenecerá a la clase "highchart".
# library(dplyr) df <- ejMiniConsolidadoAsp |> filter(Clase != "Sin Información", tolower(Clase) != "no aplica") text <- "DISTRIBUCI\u00d3N DE ASPIRANTES A PREGRADO EN SITUACI\u00d3N DE DISCAPACIDAD" Msj <- paste( "Discapacidad: Deficiencia, limitaci\u00f3n de la actividad ", "y la restricci\u00f3n de la participaci\u00f3n." ) Plot.Drilldown( datos = df, varPrincipal = "DISCAPACIDAD", varSecundaria = "TIPO_DISC", ano = max(df$YEAR), periodo = slice(df, n())$SEMESTRE, torta = TRUE, # Pruebe poniendo ambos valores ahora en FALSE vertical = TRUE, colores = c("#FF0040", "#00FF40"), colores2 = c("#66C2A5", "#FC8D62", "#8DA0CB", "#E78AC3", "#A6D854", "#FFD92F"), titulo = text, label = "Aspirantes", textInfo = "Aspirantes con discapacidades por tipo", addPeriodo = TRUE, estilo = list(hc.Tema = 7, hc.Credits = Msj) )
# library(dplyr) df <- ejMiniConsolidadoAsp |> filter(Clase != "Sin Información", tolower(Clase) != "no aplica") text <- "DISTRIBUCI\u00d3N DE ASPIRANTES A PREGRADO EN SITUACI\u00d3N DE DISCAPACIDAD" Msj <- paste( "Discapacidad: Deficiencia, limitaci\u00f3n de la actividad ", "y la restricci\u00f3n de la participaci\u00f3n." ) Plot.Drilldown( datos = df, varPrincipal = "DISCAPACIDAD", varSecundaria = "TIPO_DISC", ano = max(df$YEAR), periodo = slice(df, n())$SEMESTRE, torta = TRUE, # Pruebe poniendo ambos valores ahora en FALSE vertical = TRUE, colores = c("#FF0040", "#00FF40"), colores2 = c("#66C2A5", "#FC8D62", "#8DA0CB", "#E78AC3", "#A6D854", "#FFD92F"), titulo = text, label = "Aspirantes", textInfo = "Aspirantes con discapacidades por tipo", addPeriodo = TRUE, estilo = list(hc.Tema = 7, hc.Credits = Msj) )
Esta función proporciona excelentes herramientas y opciones para la visualización
de un histograma, con el objetivo de que pueda representar la distribución de
frecuencia de datos numéricos (variable de un conjunto de datos) en forma de
barras, donde cada barra representa la cantidad de veces que aparece un valor
o rango de valores. Dicho diagrama se puede representar usando dos diferentes
librerías que son Highcharter
y Plotly
, las cuales usan internamente JavaScript
.
Plot.Histograma( datos, variable, color, bins, density = FALSE, titulo = "", xlim, ylim, labelX = NULL, labelY = "Conteo", libreria = c("highcharter", "plotly"), estilo = NULL, estatico = FALSE )
Plot.Histograma( datos, variable, color, bins, density = FALSE, titulo = "", xlim, ylim, labelX = NULL, labelY = "Conteo", libreria = c("highcharter", "plotly"), estilo = NULL, estatico = FALSE )
datos |
Un data frame, no un objeto clase serie de tiempo o vector numérico. |
variable |
Una variable numérica dentro del data frame ingresado en |
color |
Cadena de caracteres indicando el color de relleno de las barras para todos los rangos de valores (intervalos). |
bins |
Valor numérico que indica el número máximo de bins deseado. Este valor se utilizará en un algoritmo que decidirá el tamaño de bins óptimo para que el histograma visualice mejor la distribución de los datos. |
density |
Si es |
titulo |
Cadena de caracteres indicando el título principal del plot. |
xlim |
Vector numérico que especifica el límite inferior y superior,
respectivamente, del eje |
ylim |
Vector numérico que especifica el límite inferior y superior,
respectivamente, del eje |
labelX |
Cadena de caracteres indicando la etiqueta del eje |
labelY |
Cadena de caracteres indicando la etiqueta del eje |
libreria |
Cadena de caracteres que indica el paquete con el cual se
realizará la serie. Los valores permitidos son |
estilo |
Lista compuesta por varios parámetros, los cuales van a ser usados de acuerdo con la librería especificada para graficar el plot y cuyo objetivo es personalizar pequeños detalles de ésta.
|
estatico |
Si es |
Al usar la librería Highcharter
no se podrá superponer la curva de densidad,
pues no se dispone de esta funcionalidad para dicho paquete.
Si está usando el caso estático (ggplot2
) y adicionalmente está graficando
la curva de densidad, recuerde que el eje Y
que predomina es el de la curva
de densidad, por tal razón, si va a usar el argumento ylim
debe recordar
que quedara en la escala de .
Tenga cuidado al usar el argumento xlim
en el caso estático, ya que si uno
de los bins se ve cortado (no abarca el inicio y fin de éste) no se graficará
dicho intervalo.
Al usar el paquete Highcharter
y usar las opciones de descarga, el nombre
del archivo descargado será la concatenación del plot graficado y la categoría
usada, así, por ejemplo, si se graficó el diagrama de barras para la categoría
"Nacionalidad" el nombre será PlotHistograma__Nacionalidad.png
.
Retorna el histograma (objeto widget de HTML) creado. La clase del objeto retornado será un "htmlwidget" y dependiendo de la librería usada pertenecerá adicionalmente a la clase "highchart" o "plotly".
Sabemos que puede ser abrumador el número de argumentos dentro del parámetro
estilo
, pero es necesario si queremos ofrecer al usuario la máxima
personalización dentro de cada función usando cualquier librería. Por tal
razón, a continuación, se detalla el listado completo de argumentos, usados
al especificar la librería y en qué función están presentes
(marcado con una × si lo posee).
Librería | estilo$ | Plot.Series() |
Plot.Barras() |
Plot.Apiladas() |
Plot.Boxplot() |
Plot.Radar() |
Plot.Treemap() |
Plot.Torta() |
Plot.Drilldown() |
— | gg.Tema | × | × | × | × | ||||
l | gg.Texto | × | × | × | × | ||||
l | gg.Legend | × | × | × | |||||
l | gg.Linea | × | |||||||
l | gg.Punto | × | |||||||
l | gg.Bar | × | × | ||||||
l | gg.VarWidth | × | |||||||
l | gg.OutShape | × | |||||||
l | gg.JitWidth | × | |||||||
l | gg.JitSize | × | |||||||
l | gg.Range | × | |||||||
ggplot2 | gg.plty | × | |||||||
l | gg.plwd | × | |||||||
l | gg.cglwd | × | |||||||
l | gg.cglcol | × | |||||||
l | gg.fontsize.title | × | |||||||
l | gg.fontsize.labels | × | |||||||
l | gg.fontcolor.labels | × | |||||||
l | gg.border.lwds | × | |||||||
l | gg.border.col | × | |||||||
l | gg.lowerbound.cex.labels | × | |||||||
l | gg.force.print.labels | × | |||||||
— | gg.overlap.labels | × | |||||||
» | hc.Tema | × | × | × | × | × | × | × | |
l | hc.Credits | × | × | × | × | × | × | × | |
highcharter | hc.BoxInfo | × | |||||||
l | hc.Slider | × | |||||||
» | hc.borderRadius | × | |||||||
• | ply.Credits | × | × | × | × | × | × | × | |
° | ply.Legend | × | × | ||||||
° | ply.LegendPosition | × | × | × | × | ||||
plotly | ply.Interaction | × | × | ||||||
° | ply.Relleno | × | |||||||
° | ply.Opacidad | × | × | ||||||
• | ply.LegendTitle | × | |||||||
dygraphs | dyg.LegendWidth | × | |||||||
» | dyg.Resaltar | × | |||||||
— | e.Tema | × | |||||||
l | e.Credits | × | |||||||
echarts4r | e.Forma | × | |||||||
l | e.LegType | × | |||||||
— | e.LegLoc | × | |||||||
Txt <- "Datos Oficiales de la Prueba Saber Pro del año 2020" Plot.Histograma( datos = ejSaberPro2020, variable = PUNT_RAZO_CUANT, color = "#12D640", bins = 100, titulo = "DISTRIBUCI\u00d3N EN EL PUNTAJE DE RAZONAMIENTO CUANTITATIVO", ylim = c(0, 175), labelX = "Puntaje en Matem\u00e1ticas", labelY = "N\u00famero de Estudiantes", libreria = "highcharter", estilo = list(hc.Tema = 4) ) # --------------------------------------------------------------------------- Plot.Histograma( datos = ejSaberPro2020, variable = PUNT_RAZO_CUANT, color = "#B9ABD1", bins = 80, density = TRUE, titulo = "DISTRIBUCI\u00d3N EN EL PUNTAJE\nDE RAZONAMIENTO CUANTITATIVO", ylim = c(0, 400), labelX = "Puntaje en Matem\u00e1ticas", labelY = "N\u00famero de Estudiantes", libreria = "plotly", estilo = list( ply.Credits = list(x = 0.5, y = 1.1, text = Txt), ply.Density = list(color = "#DD3380", width = 4, dash = "dot", opacity = 0.2) ) ) # --------------------------------------------------------------------------- # Ejemplo usando el caso estático (ggplot2) Plot.Histograma( datos = ejSaberPro2020, variable = PUNT_RAZO_CUANT, density = TRUE, titulo = "DISTRIBUCI\u00d3N EN EL PUNTAJE DE RAZONAMIENTO CUANTITATIVO", labelX = "Puntaje en Matem\u00e1ticas", labelY = "N\u00famero de Estudiantes", estatico = TRUE, estilo = list( gg.Tema = 6, gg.Hist = list( binwidth = 10, fill = "#FF4040", color = "#144169", alpha = 0.5, linetype = "dashed" ), gg.Density = list(color = "#20B2AA", fill = "#40E0D0", alpha = 0.4, lwd = 1.1, linetype = 2), gg.Texto = list(subtitle = "\u00bb\u00bb\u00bb", tag = "\u00ae", caption = Txt) ) )
Txt <- "Datos Oficiales de la Prueba Saber Pro del año 2020" Plot.Histograma( datos = ejSaberPro2020, variable = PUNT_RAZO_CUANT, color = "#12D640", bins = 100, titulo = "DISTRIBUCI\u00d3N EN EL PUNTAJE DE RAZONAMIENTO CUANTITATIVO", ylim = c(0, 175), labelX = "Puntaje en Matem\u00e1ticas", labelY = "N\u00famero de Estudiantes", libreria = "highcharter", estilo = list(hc.Tema = 4) ) # --------------------------------------------------------------------------- Plot.Histograma( datos = ejSaberPro2020, variable = PUNT_RAZO_CUANT, color = "#B9ABD1", bins = 80, density = TRUE, titulo = "DISTRIBUCI\u00d3N EN EL PUNTAJE\nDE RAZONAMIENTO CUANTITATIVO", ylim = c(0, 400), labelX = "Puntaje en Matem\u00e1ticas", labelY = "N\u00famero de Estudiantes", libreria = "plotly", estilo = list( ply.Credits = list(x = 0.5, y = 1.1, text = Txt), ply.Density = list(color = "#DD3380", width = 4, dash = "dot", opacity = 0.2) ) ) # --------------------------------------------------------------------------- # Ejemplo usando el caso estático (ggplot2) Plot.Histograma( datos = ejSaberPro2020, variable = PUNT_RAZO_CUANT, density = TRUE, titulo = "DISTRIBUCI\u00d3N EN EL PUNTAJE DE RAZONAMIENTO CUANTITATIVO", labelX = "Puntaje en Matem\u00e1ticas", labelY = "N\u00famero de Estudiantes", estatico = TRUE, estilo = list( gg.Tema = 6, gg.Hist = list( binwidth = 10, fill = "#FF4040", color = "#144169", alpha = 0.5, linetype = "dashed" ), gg.Density = list(color = "#20B2AA", fill = "#40E0D0", alpha = 0.4, lwd = 1.1, linetype = 2), gg.Texto = list(subtitle = "\u00bb\u00bb\u00bb", tag = "\u00ae", caption = Txt) ) )
Leaflet
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.
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, ... )
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, ... )
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. |
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.
Retorna el mapa (objeto widget de HTML) creado mediante Leaflet
, el cual
pertenece a la clase "leaflet" y "htmlwidget".
# 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) ) )
# 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) ) )
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.
Plot.Mundo( datos, paises, variable, grupo, tipo = c("Pais", "SiNoPais"), titulo, naTo0 = TRUE, colNA = "#EEEEEE", centroideMapa, zoomMapa = 2, baldosas, cortes, colores, opacidad = 0.7, colBorde, compacto = TRUE, textSize = 10, limpio = FALSE, estatico = FALSE, estilo )
Plot.Mundo( datos, paises, variable, grupo, tipo = c("Pais", "SiNoPais"), titulo, naTo0 = TRUE, colNA = "#EEEEEE", centroideMapa, zoomMapa = 2, baldosas, cortes, colores, opacidad = 0.7, colBorde, compacto = TRUE, textSize = 10, limpio = FALSE, estatico = FALSE, estilo )
datos |
Un data frame, no un vector numérico. |
paises |
Una variable 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. |
grupo |
Variable auxiliar con la cual se segmentará los datos, para que se grafique en un único plot divido en parcelas por dicha variable. |
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. |
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 país que servirá de centroide al momento de graficar el mapa. El valor por defecto es "MEXICO". 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. |
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.
|
Retorna el mapa (objeto widget de HTML) creado mediante Leaflet
, el cual
pertenece a la clase "leaflet" y "htmlwidget".
LATAM <- data.frame( Country = c("Chile", "Venezuela", "Colombia", "Argentina", "Brazil"), PIB = c(1, 10, 100, 1000, 10000)*1:5 ) Plot.Mundo( datos = LATAM, paises = Country, variable = PIB, tipo = "Pais", titulo = "PIB 2023-Q1", naTo0 = FALSE, colNA = "#3DBC25", centroideMapa = "Peru", zoomMapa = 3, cortes = c(0, 10, 100, 1000, 10000, Inf), colores = c("#DFA86A", "#FFBB00", "#FF5100", "#F20034", "#76009D"), opacidad = 0.5, colBorde = "#0E9BEE", compacto = TRUE, textSize = 4, limpio = FALSE ) # --------------------------------------------------------------------------- Plot.Mundo( datos = LATAM, paises = Country, variable = PIB, tipo = "SiNoPais", titulo = "PIB 2023-Q1", centroideMapa = "Senegal", colores = c("#45C9FF", "#FF153F"), opacidad = 0.6, colBorde = "#3DBC25", compacto = FALSE, textSize = 10, limpio = FALSE ) # --------------------------------------------------------------------------- set.seed(123) LATAM <- data.frame( Pais = c("Bolivia", "Colombia", "Ecuador", "Panama", "Venezuela", "Peru", "Argentina", "Brazil", "Chile", "Uruguay"), PIB = runif(10, -10, 10), Bolivariano = c("Sí", "Sí", "Sí", "Sí", "Sí", "Sí", "No", "No", "No", "No") ) Plot.Mundo( datos = LATAM, paises = Pais, variable = Bolivariano, tipo = "Pais", titulo = "PA\u00cdSES BOLIVARIANOS EN AM\u00c9RICA LATINA", naTo0 = FALSE, estatico = TRUE, estilo = list(Style = NA, Theme = 2) ) # --------------------------------------------------------------------------- Plot.Mundo( datos = LATAM, paises = Pais, variable = PIB, # grupo = Bolivariano, tipo = "Pais", titulo = "PROYECCI\u00d3N DEL PIB", opacidad = 0.4, colBorde = "#876445", estatico = TRUE, estilo = list( Style = "Calor", showISO = list(color = "#00468A", size = 3.5, fontface = "bold.italic"), xlim = c(-82, -34), ylim = c(-60, 14), scaleX = seq(-82, 34, by = 8), scaleY = seq(-60, 14, by = 5), anchoBorde = 1, Theme = 6, Legend = list(legend.position = "bottom", legend.direction = "horizontal"), Labs = list(subtitle = "Para Suram\u00e9rica en el 2023", caption = "Datos simulados para el ejemplo ilustrativo", tag = "\u00ae" ) ) ) # --------------------------------------------------------------------------- Territories <- data.frame( Country = c("RUS", "FRA", "UKR", "ESP", "SWE", "DEU", "DZA", "COD", "SDN", "LBY", "TCD", "NER"), Area = rep(10^(5:0), 2) ) Plot.Mundo( datos = Territories, paises = Country, variable = Area, tipo = "Pais", titulo = "ALGUNOS DE LOS PA\u00cdSES CON MAYOR \u00c1REA", # showISO = list(), naTo0 = FALSE, colNA = "#0C1C2B", cortes = c(-.0001, 10, 100, 1000, 10000, Inf), colores = c("#DFA86A", "#FFBB00", "#FF5100", "#F20034", "#76009D"), opacidad = 0.4, limpio = TRUE, estatico = TRUE, estilo = list( Style = "Intervalo", continente = c("Africa", "Europe"), Theme = 4 ) ) # --------------------------------------------------------------------------- COL <- data.frame(Pais = "CO", IDH = 100000) Plot.Mundo( datos = COL, paises = Pais, variable = IDH, tipo = "Pais", titulo = "", colores = c("#10F235", "#00BCB5"), naTo0 = TRUE, estatico = TRUE, estilo = list(Style = "SiNo", Theme = 3) )
LATAM <- data.frame( Country = c("Chile", "Venezuela", "Colombia", "Argentina", "Brazil"), PIB = c(1, 10, 100, 1000, 10000)*1:5 ) Plot.Mundo( datos = LATAM, paises = Country, variable = PIB, tipo = "Pais", titulo = "PIB 2023-Q1", naTo0 = FALSE, colNA = "#3DBC25", centroideMapa = "Peru", zoomMapa = 3, cortes = c(0, 10, 100, 1000, 10000, Inf), colores = c("#DFA86A", "#FFBB00", "#FF5100", "#F20034", "#76009D"), opacidad = 0.5, colBorde = "#0E9BEE", compacto = TRUE, textSize = 4, limpio = FALSE ) # --------------------------------------------------------------------------- Plot.Mundo( datos = LATAM, paises = Country, variable = PIB, tipo = "SiNoPais", titulo = "PIB 2023-Q1", centroideMapa = "Senegal", colores = c("#45C9FF", "#FF153F"), opacidad = 0.6, colBorde = "#3DBC25", compacto = FALSE, textSize = 10, limpio = FALSE ) # --------------------------------------------------------------------------- set.seed(123) LATAM <- data.frame( Pais = c("Bolivia", "Colombia", "Ecuador", "Panama", "Venezuela", "Peru", "Argentina", "Brazil", "Chile", "Uruguay"), PIB = runif(10, -10, 10), Bolivariano = c("Sí", "Sí", "Sí", "Sí", "Sí", "Sí", "No", "No", "No", "No") ) Plot.Mundo( datos = LATAM, paises = Pais, variable = Bolivariano, tipo = "Pais", titulo = "PA\u00cdSES BOLIVARIANOS EN AM\u00c9RICA LATINA", naTo0 = FALSE, estatico = TRUE, estilo = list(Style = NA, Theme = 2) ) # --------------------------------------------------------------------------- Plot.Mundo( datos = LATAM, paises = Pais, variable = PIB, # grupo = Bolivariano, tipo = "Pais", titulo = "PROYECCI\u00d3N DEL PIB", opacidad = 0.4, colBorde = "#876445", estatico = TRUE, estilo = list( Style = "Calor", showISO = list(color = "#00468A", size = 3.5, fontface = "bold.italic"), xlim = c(-82, -34), ylim = c(-60, 14), scaleX = seq(-82, 34, by = 8), scaleY = seq(-60, 14, by = 5), anchoBorde = 1, Theme = 6, Legend = list(legend.position = "bottom", legend.direction = "horizontal"), Labs = list(subtitle = "Para Suram\u00e9rica en el 2023", caption = "Datos simulados para el ejemplo ilustrativo", tag = "\u00ae" ) ) ) # --------------------------------------------------------------------------- Territories <- data.frame( Country = c("RUS", "FRA", "UKR", "ESP", "SWE", "DEU", "DZA", "COD", "SDN", "LBY", "TCD", "NER"), Area = rep(10^(5:0), 2) ) Plot.Mundo( datos = Territories, paises = Country, variable = Area, tipo = "Pais", titulo = "ALGUNOS DE LOS PA\u00cdSES CON MAYOR \u00c1REA", # showISO = list(), naTo0 = FALSE, colNA = "#0C1C2B", cortes = c(-.0001, 10, 100, 1000, 10000, Inf), colores = c("#DFA86A", "#FFBB00", "#FF5100", "#F20034", "#76009D"), opacidad = 0.4, limpio = TRUE, estatico = TRUE, estilo = list( Style = "Intervalo", continente = c("Africa", "Europe"), Theme = 4 ) ) # --------------------------------------------------------------------------- COL <- data.frame(Pais = "CO", IDH = 100000) Plot.Mundo( datos = COL, paises = Pais, variable = IDH, tipo = "Pais", titulo = "", colores = c("#10F235", "#00BCB5"), naTo0 = TRUE, estatico = TRUE, estilo = list(Style = "SiNo", Theme = 3) )
Esta función proporciona excelentes herramientas y opciones para la visualización
de un gráfico de radar (también conocido como gráfico de araña) dinámico con
el objetivo de observar datos multivariados de forma bidimensional. Dicho radar
chart o spider plot se puede representar usando dos diferentes librerías que
son Plotly
y ECharts
, las cuales usan internamente JavaScript
.
Plot.Radar( datos, categoria, variables, estadistico = c("Promedio", "Mediana", "Varianza", "SD", "CV", "Min", "Max"), colores, rango, ordinal = FALSE, titulo = "", libreria = c("plotly", "echarts"), estilo = NULL, estatico = FALSE )
Plot.Radar( datos, categoria, variables, estadistico = c("Promedio", "Mediana", "Varianza", "SD", "CV", "Min", "Max"), colores, rango, ordinal = FALSE, titulo = "", libreria = c("plotly", "echarts"), estilo = NULL, estatico = FALSE )
datos |
Un data frame, se espera en formato de microdatos no un agregado. |
categoria |
Una variable categórica dentro del data frame ingresado en |
variables |
Lista (ya sea creada con la sintaxis |
estadistico |
Cadena de caracteres que indica el estadístico a graficar.
Los valores permitidos son |
colores |
Cadena de caracteres indicando los colores con los cuales se
deben colorear cada una de las trazas correspondiente a cada nivel del
argumento |
rango |
Vector numérico de longitud dos que indica el valor mínimo y máximo,
respectivamente. Si no conoce el dominio del estadístico seleccionado omita
éste parámetro, pues internamente se usará |
ordinal |
Si es |
titulo |
Cadena de caracteres indicando el título principal del plot. |
libreria |
Cadena de caracteres que indica el paquete con el cual se
realizará el radar. Los valores permitidos son |
estilo |
Lista compuesta por varios parámetros, los cuales van a ser usados de acuerdo con la librería especificada para graficar el radar y cuyo objetivo es personalizar pequeños detalles de éste.
|
estatico |
Si es |
Retorna el radar (objeto widget de HTML) creado. La clase del objeto retornado será un "htmlwidget" y dependiendo de la librería usada pertenecerá adicionalmente a la clase "plotly" o "echarts4r".
Sabemos que puede ser abrumador el número de argumentos dentro del parámetro
estilo
, pero es necesario si queremos ofrecer al usuario la máxima
personalización dentro de cada función usando cualquier librería. Por tal
razón, a continuación, se detalla el listado completo de argumentos, usados
al especificar la librería y en qué función están presentes
(marcado con una × si lo posee).
Librería | estilo$ | Plot.Series() |
Plot.Barras() |
Plot.Apiladas() |
Plot.Boxplot() |
Plot.Radar() |
Plot.Treemap() |
Plot.Torta() |
Plot.Drilldown() |
— | gg.Tema | × | × | × | × | ||||
l | gg.Texto | × | × | × | × | ||||
l | gg.Legend | × | × | × | |||||
l | gg.Linea | × | |||||||
l | gg.Punto | × | |||||||
l | gg.Bar | × | × | ||||||
l | gg.VarWidth | × | |||||||
l | gg.OutShape | × | |||||||
l | gg.JitWidth | × | |||||||
l | gg.JitSize | × | |||||||
l | gg.Range | × | |||||||
ggplot2 | gg.plty | × | |||||||
l | gg.plwd | × | |||||||
l | gg.cglwd | × | |||||||
l | gg.cglcol | × | |||||||
l | gg.fontsize.title | × | |||||||
l | gg.fontsize.labels | × | |||||||
l | gg.fontcolor.labels | × | |||||||
l | gg.border.lwds | × | |||||||
l | gg.border.col | × | |||||||
l | gg.lowerbound.cex.labels | × | |||||||
l | gg.force.print.labels | × | |||||||
— | gg.overlap.labels | × | |||||||
» | hc.Tema | × | × | × | × | × | × | × | |
l | hc.Credits | × | × | × | × | × | × | × | |
highcharter | hc.BoxInfo | × | |||||||
l | hc.Slider | × | |||||||
» | hc.borderRadius | × | |||||||
• | ply.Credits | × | × | × | × | × | × | × | |
° | ply.Legend | × | × | ||||||
° | ply.LegendPosition | × | × | × | × | ||||
plotly | ply.Interaction | × | × | ||||||
° | ply.Relleno | × | |||||||
° | ply.Opacidad | × | × | ||||||
• | ply.LegendTitle | × | |||||||
dygraphs | dyg.LegendWidth | × | |||||||
» | dyg.Resaltar | × | |||||||
— | e.Tema | × | |||||||
l | e.Credits | × | |||||||
echarts4r | e.Forma | × | |||||||
l | e.LegType | × | |||||||
— | e.LegLoc | × | |||||||
# library(dplyr) Plot.Radar( datos = ejSaberPro2020, categoria = TIPO_COL, variables = vars(PUNT_LECT_CRIT, PUNT_RAZO_CUANT, PUNT_INGLES), colores = c("#2ACE82", "#FE2667", "#32E7C8", "#FF8D00"), rango = c(0, NaN), estilo = list(ply.Relleno = "tonext") ) # --------------------------------------------------------------------------- Plot.Radar( datos = ejSaberPro2020, categoria = SEDE_NOMBRE_ADM, variables = vars( PUNTAJE_GLOBAL, PUNT_RAZO_CUANT, PUNT_INGLES, PUNT_LECT_CRIT, PUNT_COMP_CIUD, PUNT_COMU_ESCR ), rango = c(0, NaN) ) # --------------------------------------------------------------------------- Plot.Radar( datos = ejSaberPro2020, categoria = SEDE_NOMBRE_ADM, variables = vars( PUNTAJE_GLOBAL, PUNT_RAZO_CUANT, PUNT_INGLES, PUNT_LECT_CRIT, PUNT_COMP_CIUD, PUNT_COMU_ESCR ), rango = c(0, NaN), libreria = "echarts" ) # --------------------------------------------------------------------------- misColores <- c( "#29ABE2", # AZUL CLARO | Amazonia "#8CC63F", # VERDE | Bogota "#CC241D", # ROJO | Caribe "#0071BC", # AZUL VIVO | Manizales "#F15A24", # NARANJA | Medellin "#FBB03B", # AMARILLO | Orinoquia "#93278F", # MORADO | Palmira "#8A381A" # GRIS | Tumaco ) Msj <- "Gr\u00e1fico de radar para representar los puntajes multivariados de la prueba Saber Pro." Plot.Radar( datos = ejSaberPro2020, categoria = SEDE_NOMBRE_ADM, variables = vars( PUNTAJE_GLOBAL, PUNT_RAZO_CUANT, PUNT_INGLES, PUNT_LECT_CRIT, PUNT_COMP_CIUD, PUNT_COMU_ESCR ), estadistico = "SD", colores = misColores, rango = c(0, NaN), titulo = "SPIDER PLOT", libreria = "plotly", estilo = list( ply.LegendTitle = "SEDE:", ply.LegendPosition = list(x = 0, y = -0.15, orientation = "h"), ply.Relleno = "tonext", ply.Opacidad = 0.8, ply.Credits = list(x = 0.8, y = -0.1, text = Msj) ) ) # --------------------------------------------------------------------------- Plot.Radar( datos = ejSaberPro2020, categoria = SEDE_NOMBRE_ADM, variables = vars( PUNTAJE_GLOBAL, PUNT_RAZO_CUANT, PUNT_INGLES, PUNT_LECT_CRIT, PUNT_COMP_CIUD, PUNT_COMU_ESCR ), estadistico = "CV", colores = misColores, rango = c(0, 0.25), titulo = "RADAR CHART", libreria = "echarts", estilo = list( e.Credits = Msj, e.Forma = "circle", e.Tema = 10, e.LegType = "scroll", e.LegLoc = 0 ) ) # --------------------------------------------------------------------------- # Ejemplo usando el caso estático (fmsb) Plot.Radar( datos = ejSaberPro2020, categoria = TIPO_COL, variables = vars( PUNT_RAZO_CUANT, PUNT_INGLES, PUNT_LECT_CRIT, PUNT_COMP_CIUD, PUNT_COMU_ESCR ), estadistico = "SD", colores = c("#89D8FF", "#9CFF86", "#FFA568", "#FF7F7F"), titulo = "RADAR CHART DE LA DESVIACI\u00d3N EST\u00c1NDAR\nPOR COMPONENTE EVALUADO", # rango = c(10, 40), estatico = TRUE, estilo = list( gg.Range = TRUE, gg.plty = 5, gg.plwd = 4, gg.cglwd = 2, gg.cglcol = "#856AA1" ) )
# library(dplyr) Plot.Radar( datos = ejSaberPro2020, categoria = TIPO_COL, variables = vars(PUNT_LECT_CRIT, PUNT_RAZO_CUANT, PUNT_INGLES), colores = c("#2ACE82", "#FE2667", "#32E7C8", "#FF8D00"), rango = c(0, NaN), estilo = list(ply.Relleno = "tonext") ) # --------------------------------------------------------------------------- Plot.Radar( datos = ejSaberPro2020, categoria = SEDE_NOMBRE_ADM, variables = vars( PUNTAJE_GLOBAL, PUNT_RAZO_CUANT, PUNT_INGLES, PUNT_LECT_CRIT, PUNT_COMP_CIUD, PUNT_COMU_ESCR ), rango = c(0, NaN) ) # --------------------------------------------------------------------------- Plot.Radar( datos = ejSaberPro2020, categoria = SEDE_NOMBRE_ADM, variables = vars( PUNTAJE_GLOBAL, PUNT_RAZO_CUANT, PUNT_INGLES, PUNT_LECT_CRIT, PUNT_COMP_CIUD, PUNT_COMU_ESCR ), rango = c(0, NaN), libreria = "echarts" ) # --------------------------------------------------------------------------- misColores <- c( "#29ABE2", # AZUL CLARO | Amazonia "#8CC63F", # VERDE | Bogota "#CC241D", # ROJO | Caribe "#0071BC", # AZUL VIVO | Manizales "#F15A24", # NARANJA | Medellin "#FBB03B", # AMARILLO | Orinoquia "#93278F", # MORADO | Palmira "#8A381A" # GRIS | Tumaco ) Msj <- "Gr\u00e1fico de radar para representar los puntajes multivariados de la prueba Saber Pro." Plot.Radar( datos = ejSaberPro2020, categoria = SEDE_NOMBRE_ADM, variables = vars( PUNTAJE_GLOBAL, PUNT_RAZO_CUANT, PUNT_INGLES, PUNT_LECT_CRIT, PUNT_COMP_CIUD, PUNT_COMU_ESCR ), estadistico = "SD", colores = misColores, rango = c(0, NaN), titulo = "SPIDER PLOT", libreria = "plotly", estilo = list( ply.LegendTitle = "SEDE:", ply.LegendPosition = list(x = 0, y = -0.15, orientation = "h"), ply.Relleno = "tonext", ply.Opacidad = 0.8, ply.Credits = list(x = 0.8, y = -0.1, text = Msj) ) ) # --------------------------------------------------------------------------- Plot.Radar( datos = ejSaberPro2020, categoria = SEDE_NOMBRE_ADM, variables = vars( PUNTAJE_GLOBAL, PUNT_RAZO_CUANT, PUNT_INGLES, PUNT_LECT_CRIT, PUNT_COMP_CIUD, PUNT_COMU_ESCR ), estadistico = "CV", colores = misColores, rango = c(0, 0.25), titulo = "RADAR CHART", libreria = "echarts", estilo = list( e.Credits = Msj, e.Forma = "circle", e.Tema = 10, e.LegType = "scroll", e.LegLoc = 0 ) ) # --------------------------------------------------------------------------- # Ejemplo usando el caso estático (fmsb) Plot.Radar( datos = ejSaberPro2020, categoria = TIPO_COL, variables = vars( PUNT_RAZO_CUANT, PUNT_INGLES, PUNT_LECT_CRIT, PUNT_COMP_CIUD, PUNT_COMU_ESCR ), estadistico = "SD", colores = c("#89D8FF", "#9CFF86", "#FFA568", "#FF7F7F"), titulo = "RADAR CHART DE LA DESVIACI\u00d3N EST\u00c1NDAR\nPOR COMPONENTE EVALUADO", # rango = c(10, 40), estatico = TRUE, estilo = list( gg.Range = TRUE, gg.plty = 5, gg.plwd = 4, gg.cglwd = 2, gg.cglcol = "#856AA1" ) )
Esta función proporciona excelentes herramientas y opciones para la visualización
de series de tiempo dinámicas con el objetivo de estudiar la evolución de una
o varias variables a lo largo del tiempo. Dicha serie interactiva se puede
representar usando tres diferentes librerías que son Highcharter
, Plotly
y Dygraph
, las cuales usan internamente JavaScript
.
Plot.Series( datos, tiempo, valores, categoria, freqRelativa = FALSE, invertir = FALSE, ylim, colores, titulo = "", labelX = "Periodo", labelY = "", libreria = c("highcharter", "plotly", "dygraphs"), estilo = NULL, estatico = FALSE )
Plot.Series( datos, tiempo, valores, categoria, freqRelativa = FALSE, invertir = FALSE, ylim, colores, titulo = "", labelX = "Periodo", labelY = "", libreria = c("highcharter", "plotly", "dygraphs"), estilo = NULL, estatico = FALSE )
datos |
Un data frame, no un objeto clase serie de tiempo o vector numérico. |
tiempo |
Lista de variable(s) tanto numéricas como categóricas que se concatenaran para crear un único periodo temporal (ordenado ascendentemente). |
valores |
Variable numérica que contiene los valores que desea graficar. |
categoria |
Una variable categórica dentro del data frame ingresado en |
freqRelativa |
Si es |
invertir |
Si es |
ylim |
Vector numérico que especifica el límite inferior y superior,
respectivamente, del eje |
colores |
Cadena de caracteres indicando los colores con los cuales se
deben colorear cada una de las series correspondiente a cada nivel del
argumento |
titulo |
Cadena de caracteres indicando el título principal del plot. |
labelX |
Cadena de caracteres indicando la etiqueta del eje |
labelY |
Cadena de caracteres indicando la etiqueta del eje |
libreria |
Cadena de caracteres que indica el paquete con el cual se
realizará la serie. Los valores permitidos son |
estilo |
Lista compuesta por varios parámetros, los cuales van a ser usados de acuerdo con la librería especificada para graficar la serie y cuyo objetivo es personalizar pequeños detalles de ésta.
|
estatico |
Si es |
Al usar el paquete Highcharter
y usar las opciones de descarga, el nombre del
archivo descargado será la concatenación del plot graficado y la categoría usada,
así, por ejemplo, si se graficó la serie de tiempo para la categoría "Sede" el
nombre será PlotSeries_Sede.png
.
Tenga en cuenta que la librería "dygraphs"
solo la podrá usar si dentro del
argumento tiempo ingresa las dos variables (YEAR
, SEMESTRE
) para asemejar
su estructura a los agregados clásicos. En caso contrario le arrojara un error.
Recuerde que puede usar más temas (cualquiera de hecho) de los que se
proporcionan para ggplot2
. Por ejemplo, los de hrbrthemes
o ggtech.
Retorna la serie (objeto widget de HTML) creada. La clase del objeto retornado será un "htmlwidget" y dependiendo de la librería usada pertenecerá adicionalmente a la clase "highchart", "plotly" o "dygraphs".
Sabemos que puede ser abrumador el número de argumentos dentro del parámetro
estilo
, pero es necesario si queremos ofrecer al usuario la máxima
personalización dentro de cada función usando cualquier librería. Por tal
razón, a continuación, se detalla el listado completo de argumentos, usados
al especificar la librería y en qué función están presentes
(marcado con una × si lo posee).
Librería | estilo$ | Plot.Series() |
Plot.Barras() |
Plot.Apiladas() |
Plot.Boxplot() |
Plot.Radar() |
Plot.Treemap() |
Plot.Torta() |
Plot.Drilldown() |
— | gg.Tema | × | × | × | × | ||||
l | gg.Texto | × | × | × | × | ||||
l | gg.Legend | × | × | × | |||||
l | gg.Linea | × | |||||||
l | gg.Punto | × | |||||||
l | gg.Bar | × | × | ||||||
l | gg.VarWidth | × | |||||||
l | gg.OutShape | × | |||||||
l | gg.JitWidth | × | |||||||
l | gg.JitSize | × | |||||||
l | gg.Range | × | |||||||
ggplot2 | gg.plty | × | |||||||
l | gg.plwd | × | |||||||
l | gg.cglwd | × | |||||||
l | gg.cglcol | × | |||||||
l | gg.fontsize.title | × | |||||||
l | gg.fontsize.labels | × | |||||||
l | gg.fontcolor.labels | × | |||||||
l | gg.border.lwds | × | |||||||
l | gg.border.col | × | |||||||
l | gg.lowerbound.cex.labels | × | |||||||
l | gg.force.print.labels | × | |||||||
— | gg.overlap.labels | × | |||||||
» | hc.Tema | × | × | × | × | × | × | × | |
l | hc.Credits | × | × | × | × | × | × | × | |
highcharter | hc.BoxInfo | × | |||||||
l | hc.Slider | × | |||||||
» | hc.borderRadius | × | |||||||
• | ply.Credits | × | × | × | × | × | × | × | |
° | ply.Legend | × | × | ||||||
° | ply.LegendPosition | × | × | × | × | ||||
plotly | ply.Interaction | × | × | ||||||
° | ply.Relleno | × | |||||||
° | ply.Opacidad | × | × | ||||||
• | ply.LegendTitle | × | |||||||
dygraphs | dyg.LegendWidth | × | |||||||
» | dyg.Resaltar | × | |||||||
— | e.Tema | × | |||||||
l | e.Credits | × | |||||||
echarts4r | e.Forma | × | |||||||
l | e.LegType | × | |||||||
— | e.LegLoc | × | |||||||
A continuación, se consolida en una tabla amigable el listado, uso y disposición
de todas las opciones para el parámetro estilo
, dependiendo del tipo de gráfico
(dinámico o estático) y la librería usada (en el caso de que sea dinámico).
PARÁMETRO | VALOR | PARÁMETRO | VALOR | PARÁMETRO |
* | • | gg.Tema | ||
* | • | gg.Legend | ||
TRUE | • | gg.Linea | ||
* | • | gg.Punto | ||
* | • | gg.Texto | ||
* | • | gg.Repel | ||
O | ~ | highcharter | hc.Tema | |
estatico | O | _ | ¦ | hc.BoxInfo |
O | _ | ¦ | hc.Slider | |
O | _ | ¦ | hc.Credits | |
FALSE | libreria | plotly | ply.LegendPosition | |
O | _ | ° | ply.Credits | |
O | _ | ° | ply.Interaction | |
O | _ | dygraphs | dyg.LegendWidth | |
O | ~ | L | dyg.Resaltar | |
# library("tibble"); library("dplyr") set.seed(42) Blood <- tibble( Year = rep(2000:2001, each = 100), Quarter = sample(c("I", "II", "III", "IV"), size = 200, replace = TRUE), Week = sample(c("1rt", "2nd", "3rd"), size = 200, replace = TRUE), Group = sample( c("O", "A", "B", "AB"), size = 200, prob = c(.5, .3, .16, .4), replace = TRUE ), RH = sample(c("+", "-"), size = 200, replace = TRUE), Prevalence = round(runif(200)*100) ) Plot.Series( datos = Blood, tiempo = vars(Year, Quarter, Week), valores = Prevalence, categoria = RH, labelX = "" ) Plot.Series( datos = Blood, tiempo = vars(Year, Quarter), valores = Prevalence, categoria = Group, libreria = "plotly" ) # --------------------------------------------------------------------------- misColores <- c( "#29ABE2", # AZUL CLARO | Amazonia "#8CC63F", # VERDE | Bogota "#CC241D", # ROJO | Caribe "#0071BC", # AZUL VIVO | Manizales "#F15A24", # NARANJA | Medellin "#FBB03B", # AMARILLO | Orinoquia "#93278F", # MORADO | Palmira "#8A381A" # GRIS | Tumaco ) Msj <- "Distribuci\u00f3n de estudiantes graduados (desde el 2009-I al 2021-I) por sede." Txt <- "EVOLUCI\u00d3N DEL N\u00daMERO DE GRADUADOS POR SEDE" Plot.Series( datos = ejConsolidadoGrad, categoria = "SEDE_NOMBRE_ADM", freqRelativa = TRUE, ylim = c(0, 75), colores = misColores, titulo = Txt, labelY = "Frecuencia Relativa<br>(% de graduados)", libreria = "highcharter", estilo = list(LegendTitle = "SEDE:", hc.Tema = 10, hc.Slider = TRUE, hc.Credits = Msj) ) # --------------------------------------------------------------------------- Plot.Series( datos = ejConsolidadoGrad, categoria = "SEDE_NOMBRE_ADM", invertir = TRUE, colores = misColores, titulo = Txt, labelY = "N\u00famero de Graduados", libreria = "plotly", estilo = list( LegendTitle = "SEDE:", ply.Interaction = "closest", ply.LegendPosition = list(x = 0.16, y = -0.25, orientation = "h"), ply.Credits = list(x = 0.5, y = 0.1, text = Msj) ) ) # --------------------------------------------------------------------------- Plot.Series( datos = ejConsolidadoGrad, categoria = "SEDE_NOMBRE_ADM", colores = misColores, titulo = Txt, labelY = "N\u00famero de Graduados (k: miles)", libreria = "dygraphs", estilo = list(dyg.LegendWidth = 650, dyg.Resaltar = TRUE) ) # --------------------------------------------------------------------------- # Agrupando para eliminar el semestre # library("dplyr") df <- ejConsolidadoGrad |> group_by(Variable, YEAR, Clase) |> summarise(Total = sum(Total, na.rm = TRUE), .groups = "drop") Msj <- "Comportamiento anual, considerando ambos semestres (exceptuando el caso del 2021)." Plot.Series( datos = df, categoria = "SEXO", ylim = c(1000, 6000), colores = c("#3360FF", "#F30081"), titulo = "EVOLUCI\u00d3N DEL N\u00daMERO DE GRADUADOS POR SEXO", labelX = "A\u00f1o", labelY = "N\u00famero de Graduados", libreria = "highcharter", estilo = list(hc.Tema = 1, hc.Credits = Msj) ) # --------------------------------------------------------------------------- # Ejemplo usando el caso estático (ggplot2) # library("magick"); library("cowplot") txtA <- "EVOLUCI\u00d3N DEL N.\u00ba DE GRADUADOS \u00d7 SEDE" txtB <- "\nComportamiento anual (exceptuando el caso del 2021)." fig1 <- Plot.Series( datos = ejConsolidadoGrad, categoria = "SEDE_NOMBRE_ADM", freqRelativa = FALSE, invertir = FALSE, ylim = c(100, 2000), colores = misColores, titulo = txtA, labelY = "N\u00famero de Graduados", estatico = TRUE, estilo = list( LegendTitle = "SEDE:", gg.Tema = 8, gg.Legend = list(legend.position = "bottom", legend.direction = "horizontal"), gg.Linea = list(linetype = 2, size = 0.1, arrow = grid::arrow()), gg.Punto = list(alpha = 0.2, shape = 21, size = 2, stroke = 5), gg.Texto = list( subtitle = txtB, caption = "\t\t Informaci\u00f3n Disponible desde 2009-1", tag = "\u00ae" ) ) ) # A continuación, se detalla el caso en el que quiera adicionar un logo a 'fig1' # library("ggplot2"); library("magick"); require("cowplot") URL <- "https://upload.wikimedia.org/wikipedia/commons/1/1e/UNAL_Logosimbolo.svg" LogoUN <- magick::image_read_svg(URL) ggdraw() + draw_image(LogoUN, scale = 0.15, x = 0.15, hjust = 1, halign = 1, valign = 0) + draw_plot(fig1 + theme(legend.background = element_blank(), panel.background = element_blank(), plot.background = element_blank() ) ) # --------------------------------------------------------------------------- # A continuación, se detalla el caso en el que quiera anotaciones textuales repulsivas # * (1) Espacio vacío que se debe respetar alrededor de la caja delimitadora # * (2) Espacio vacío que se debe respetar alrededor de cada punto # * (3) Entre más bajo más flechas, entre más distancia menos flechas Plot.Series( datos = ejConsolidadoGrad, categoria = "SEDE_NOMBRE_ADM", freqRelativa = FALSE, invertir = FALSE, ylim = c(100, 2000), colores = misColores, titulo = "EVOLUCI\u00d3N DEL N.\u00ba DE GRADUADOS \u00d7 SEDE", labelY = "N\u00famero de Graduados", estatico = TRUE, estilo = list( gg.Tema = 1, gg.Repel = list( direction = "both", seed = 42, nudge_y = 0.25, arrow = arrow(length = unit(0.01, "npc")), segment.colour = "#4C716B", box.padding = 0.5 , # (1) point.padding = 0.25, # (2) min.segment.length = 0.45 # (3) ) ) )
# library("tibble"); library("dplyr") set.seed(42) Blood <- tibble( Year = rep(2000:2001, each = 100), Quarter = sample(c("I", "II", "III", "IV"), size = 200, replace = TRUE), Week = sample(c("1rt", "2nd", "3rd"), size = 200, replace = TRUE), Group = sample( c("O", "A", "B", "AB"), size = 200, prob = c(.5, .3, .16, .4), replace = TRUE ), RH = sample(c("+", "-"), size = 200, replace = TRUE), Prevalence = round(runif(200)*100) ) Plot.Series( datos = Blood, tiempo = vars(Year, Quarter, Week), valores = Prevalence, categoria = RH, labelX = "" ) Plot.Series( datos = Blood, tiempo = vars(Year, Quarter), valores = Prevalence, categoria = Group, libreria = "plotly" ) # --------------------------------------------------------------------------- misColores <- c( "#29ABE2", # AZUL CLARO | Amazonia "#8CC63F", # VERDE | Bogota "#CC241D", # ROJO | Caribe "#0071BC", # AZUL VIVO | Manizales "#F15A24", # NARANJA | Medellin "#FBB03B", # AMARILLO | Orinoquia "#93278F", # MORADO | Palmira "#8A381A" # GRIS | Tumaco ) Msj <- "Distribuci\u00f3n de estudiantes graduados (desde el 2009-I al 2021-I) por sede." Txt <- "EVOLUCI\u00d3N DEL N\u00daMERO DE GRADUADOS POR SEDE" Plot.Series( datos = ejConsolidadoGrad, categoria = "SEDE_NOMBRE_ADM", freqRelativa = TRUE, ylim = c(0, 75), colores = misColores, titulo = Txt, labelY = "Frecuencia Relativa<br>(% de graduados)", libreria = "highcharter", estilo = list(LegendTitle = "SEDE:", hc.Tema = 10, hc.Slider = TRUE, hc.Credits = Msj) ) # --------------------------------------------------------------------------- Plot.Series( datos = ejConsolidadoGrad, categoria = "SEDE_NOMBRE_ADM", invertir = TRUE, colores = misColores, titulo = Txt, labelY = "N\u00famero de Graduados", libreria = "plotly", estilo = list( LegendTitle = "SEDE:", ply.Interaction = "closest", ply.LegendPosition = list(x = 0.16, y = -0.25, orientation = "h"), ply.Credits = list(x = 0.5, y = 0.1, text = Msj) ) ) # --------------------------------------------------------------------------- Plot.Series( datos = ejConsolidadoGrad, categoria = "SEDE_NOMBRE_ADM", colores = misColores, titulo = Txt, labelY = "N\u00famero de Graduados (k: miles)", libreria = "dygraphs", estilo = list(dyg.LegendWidth = 650, dyg.Resaltar = TRUE) ) # --------------------------------------------------------------------------- # Agrupando para eliminar el semestre # library("dplyr") df <- ejConsolidadoGrad |> group_by(Variable, YEAR, Clase) |> summarise(Total = sum(Total, na.rm = TRUE), .groups = "drop") Msj <- "Comportamiento anual, considerando ambos semestres (exceptuando el caso del 2021)." Plot.Series( datos = df, categoria = "SEXO", ylim = c(1000, 6000), colores = c("#3360FF", "#F30081"), titulo = "EVOLUCI\u00d3N DEL N\u00daMERO DE GRADUADOS POR SEXO", labelX = "A\u00f1o", labelY = "N\u00famero de Graduados", libreria = "highcharter", estilo = list(hc.Tema = 1, hc.Credits = Msj) ) # --------------------------------------------------------------------------- # Ejemplo usando el caso estático (ggplot2) # library("magick"); library("cowplot") txtA <- "EVOLUCI\u00d3N DEL N.\u00ba DE GRADUADOS \u00d7 SEDE" txtB <- "\nComportamiento anual (exceptuando el caso del 2021)." fig1 <- Plot.Series( datos = ejConsolidadoGrad, categoria = "SEDE_NOMBRE_ADM", freqRelativa = FALSE, invertir = FALSE, ylim = c(100, 2000), colores = misColores, titulo = txtA, labelY = "N\u00famero de Graduados", estatico = TRUE, estilo = list( LegendTitle = "SEDE:", gg.Tema = 8, gg.Legend = list(legend.position = "bottom", legend.direction = "horizontal"), gg.Linea = list(linetype = 2, size = 0.1, arrow = grid::arrow()), gg.Punto = list(alpha = 0.2, shape = 21, size = 2, stroke = 5), gg.Texto = list( subtitle = txtB, caption = "\t\t Informaci\u00f3n Disponible desde 2009-1", tag = "\u00ae" ) ) ) # A continuación, se detalla el caso en el que quiera adicionar un logo a 'fig1' # library("ggplot2"); library("magick"); require("cowplot") URL <- "https://upload.wikimedia.org/wikipedia/commons/1/1e/UNAL_Logosimbolo.svg" LogoUN <- magick::image_read_svg(URL) ggdraw() + draw_image(LogoUN, scale = 0.15, x = 0.15, hjust = 1, halign = 1, valign = 0) + draw_plot(fig1 + theme(legend.background = element_blank(), panel.background = element_blank(), plot.background = element_blank() ) ) # --------------------------------------------------------------------------- # A continuación, se detalla el caso en el que quiera anotaciones textuales repulsivas # * (1) Espacio vacío que se debe respetar alrededor de la caja delimitadora # * (2) Espacio vacío que se debe respetar alrededor de cada punto # * (3) Entre más bajo más flechas, entre más distancia menos flechas Plot.Series( datos = ejConsolidadoGrad, categoria = "SEDE_NOMBRE_ADM", freqRelativa = FALSE, invertir = FALSE, ylim = c(100, 2000), colores = misColores, titulo = "EVOLUCI\u00d3N DEL N.\u00ba DE GRADUADOS \u00d7 SEDE", labelY = "N\u00famero de Graduados", estatico = TRUE, estilo = list( gg.Tema = 1, gg.Repel = list( direction = "both", seed = 42, nudge_y = 0.25, arrow = arrow(length = unit(0.01, "npc")), segment.colour = "#4C716B", box.padding = 0.5 , # (1) point.padding = 0.25, # (2) min.segment.length = 0.45 # (3) ) ) )
Esta función permite mostrar de forma interactiva (y estática) una descripción
compacta y general de una variable con sus respectivas categorías. Dicho diagrama
se puede representar usando dos diferentes librerías que son Highcharter
y
Plotly
, las cuales usan internamente JavaScript
.
Plot.Torta( datos, valores, categoria, ano, periodo, colores, titulo = "", label = "", addPeriodo = FALSE, libreria = c("highcharter", "plotly"), estilo = NULL, estatico = FALSE )
Plot.Torta( datos, valores, categoria, ano, periodo, colores, titulo = "", label = "", addPeriodo = FALSE, libreria = c("highcharter", "plotly"), estilo = NULL, estatico = FALSE )
datos |
Un data frame, no un vector numérico. |
valores |
Variable numérica que contiene los valores que desea graficar. |
categoria |
Una variable categórica dentro del data frame ingresado en |
ano |
Argument deprecated. This Argument still exist but will be removed in the next version. |
periodo |
Argument deprecated. This Argument still exist but will be removed in the next version. |
colores |
Cadena de caracteres indicando los colores con los cuales se
deben colorear cada una de las series correspondiente a cada nivel del
argumento |
titulo |
Cadena de caracteres indicando el título principal del plot. |
label |
Cadena de caracteres indicando la etiqueta a la que hace referencia el plot. |
addPeriodo |
Argument deprecated. This Argument still exist but will be removed in the next version. |
libreria |
Cadena de caracteres que indica el paquete con el cual se realizará
el plot. Los valores permitidos son |
estilo |
Lista compuesta por varios parámetros, los cuales van a ser usados de acuerdo con la librería especificada para graficar la torta y cuyo objetivo es personalizar pequeños detalles de ésta.
|
estatico |
Si es |
Al usar el paquete Highcharter
y usar las opciones de descarga, el nombre del
archivo descargado será la concatenación del plot graficado y la categoría usada,
así, por ejemplo, si se graficó el diagrama de pie para la categoría "Sexo" el
nombre será PlotTorta_Sexo.png
.
Retorna el diagrama circular (objeto widget de HTML) creado. La clase del objeto retornado será un "htmlwidget" y dependiendo de la librería usada pertenecerá adicionalmente a la clase "highchart" o "plotly".
Sabemos que puede ser abrumador el número de argumentos dentro del parámetro
estilo
, pero es necesario si queremos ofrecer al usuario la máxima
personalización dentro de cada función usando cualquier librería. Por tal
razón, a continuación, se detalla el listado completo de argumentos, usados
al especificar la librería y en qué función están presentes
(marcado con una × si lo posee).
Librería | estilo$ | Plot.Series() |
Plot.Barras() |
Plot.Apiladas() |
Plot.Boxplot() |
Plot.Radar() |
Plot.Treemap() |
Plot.Torta() |
Plot.Drilldown() |
— | gg.Tema | × | × | × | × | ||||
l | gg.Texto | × | × | × | × | ||||
l | gg.Legend | × | × | × | |||||
l | gg.Linea | × | |||||||
l | gg.Punto | × | |||||||
l | gg.Bar | × | × | ||||||
l | gg.VarWidth | × | |||||||
l | gg.OutShape | × | |||||||
l | gg.JitWidth | × | |||||||
l | gg.JitSize | × | |||||||
l | gg.Range | × | |||||||
ggplot2 | gg.plty | × | |||||||
l | gg.plwd | × | |||||||
l | gg.cglwd | × | |||||||
l | gg.cglcol | × | |||||||
l | gg.fontsize.title | × | |||||||
l | gg.fontsize.labels | × | |||||||
l | gg.fontcolor.labels | × | |||||||
l | gg.border.lwds | × | |||||||
l | gg.border.col | × | |||||||
l | gg.lowerbound.cex.labels | × | |||||||
l | gg.force.print.labels | × | |||||||
— | gg.overlap.labels | × | |||||||
» | hc.Tema | × | × | × | × | × | × | × | |
l | hc.Credits | × | × | × | × | × | × | × | |
highcharter | hc.BoxInfo | × | |||||||
l | hc.Slider | × | |||||||
» | hc.borderRadius | × | |||||||
• | ply.Credits | × | × | × | × | × | × | × | |
° | ply.Legend | × | × | ||||||
° | ply.LegendPosition | × | × | × | × | ||||
plotly | ply.Interaction | × | × | ||||||
° | ply.Relleno | × | |||||||
° | ply.Opacidad | × | × | ||||||
• | ply.LegendTitle | × | |||||||
dygraphs | dyg.LegendWidth | × | |||||||
» | dyg.Resaltar | × | |||||||
— | e.Tema | × | |||||||
l | e.Credits | × | |||||||
echarts4r | e.Forma | × | |||||||
l | e.LegType | × | |||||||
— | e.LegLoc | × | |||||||
Los gráficos circulares son una forma muy mala de mostrar información. El ojo es bueno para juzgar medidas lineales y malo para juzgar áreas relativas. Un gráfico de barras o un gráfico de puntos es una forma preferible de mostrar este tipo de datos.
# Ejemplo generalizado (sin uso de un consolidado como input) # library("tibble"); library("dplyr") set.seed(42) Blood <- tibble( Group = sample(c("O", "A", "B", "AB"), size = 200, prob = c(0.5, 0.3, 0.16, 0.4), replace = TRUE), Prevalence = round(runif(200)*100) ) Plot.Torta( datos = Blood , valores = Prevalence, categoria = Group , colores = c("#FF553D", "#A5FF67", "#40D2FF", "#FFDB5C"), label = "No. of Prevalence" ) Plot.Torta( datos = Blood , valores = Prevalence, categoria = Group , colores = c("#FF553D", "#A5FF67", "#40D2FF", "#FFDB5C"), titulo = "DISTRIBUTION OF BLOOD GROUPS", estatico = TRUE, estilo = list(gg.Tema = 6) ) Plot.Torta( datos = Blood , valores = Prevalence, categoria = Group , colores = c("#FF553D", "#A5FF67", "#40D2FF", "#FFDB5C"), titulo = "DISTRIBUTION OF BLOOD GROUPS", estatico = TRUE, estilo = list( gg.Tema = 7, gg.Donut = TRUE, gg.Percent = FALSE, gg.Texto = list( subtitle = "Synthetic or fake data that resembles real-world data", caption = "* Data Simulation", tag = "\u00ae" ) ) ) # --------------------------------------------------------------------------- col <- c("#F15A24", "#8CC63F") Msj <- "Distribuci\u00f3n de estudiantes graduados en el primer periodo acad\u00e9mico del 2021." Txt <- "DISTRIBUCI\u00d3N DE GRADUADOS POR MODALIDAD DE FORMACI\u00d3N" Plot.Torta( datos = ejConsolidadoGrad |> filter(YEAR==2021, SEMESTRE==1), categoria = "TIPO_NIVEL", colores = col, titulo = paste(Txt, "(Periodo 2021-1)"), label = "N\u00famero de Graduados", libreria = "highcharter", estilo = list( LegendTitle = "\u00c9sta es una descripci\u00f3n para la leyenda:", hc.Tema = 7, hc.Credits = Msj ) ) # --------------------------------------------------------------------------- Msj <- "Distribuci\u00f3n hist\u00f3rica de estudiantes graduados (desde el 2009-I al 2021-I)." Plot.Torta( datos = ejConsolidadoGrad, categoria = "TIPO_NIVEL", colores = col, titulo = gsub("DOS POR", "DOS\nPOR", Txt), libreria = "plotly", estilo = list( ply.Legend = "inside", ply.Credits = list( x = 0.8, y = 1.1, text = paste0("<b>", Msj, "</b>") ) ) )
# Ejemplo generalizado (sin uso de un consolidado como input) # library("tibble"); library("dplyr") set.seed(42) Blood <- tibble( Group = sample(c("O", "A", "B", "AB"), size = 200, prob = c(0.5, 0.3, 0.16, 0.4), replace = TRUE), Prevalence = round(runif(200)*100) ) Plot.Torta( datos = Blood , valores = Prevalence, categoria = Group , colores = c("#FF553D", "#A5FF67", "#40D2FF", "#FFDB5C"), label = "No. of Prevalence" ) Plot.Torta( datos = Blood , valores = Prevalence, categoria = Group , colores = c("#FF553D", "#A5FF67", "#40D2FF", "#FFDB5C"), titulo = "DISTRIBUTION OF BLOOD GROUPS", estatico = TRUE, estilo = list(gg.Tema = 6) ) Plot.Torta( datos = Blood , valores = Prevalence, categoria = Group , colores = c("#FF553D", "#A5FF67", "#40D2FF", "#FFDB5C"), titulo = "DISTRIBUTION OF BLOOD GROUPS", estatico = TRUE, estilo = list( gg.Tema = 7, gg.Donut = TRUE, gg.Percent = FALSE, gg.Texto = list( subtitle = "Synthetic or fake data that resembles real-world data", caption = "* Data Simulation", tag = "\u00ae" ) ) ) # --------------------------------------------------------------------------- col <- c("#F15A24", "#8CC63F") Msj <- "Distribuci\u00f3n de estudiantes graduados en el primer periodo acad\u00e9mico del 2021." Txt <- "DISTRIBUCI\u00d3N DE GRADUADOS POR MODALIDAD DE FORMACI\u00d3N" Plot.Torta( datos = ejConsolidadoGrad |> filter(YEAR==2021, SEMESTRE==1), categoria = "TIPO_NIVEL", colores = col, titulo = paste(Txt, "(Periodo 2021-1)"), label = "N\u00famero de Graduados", libreria = "highcharter", estilo = list( LegendTitle = "\u00c9sta es una descripci\u00f3n para la leyenda:", hc.Tema = 7, hc.Credits = Msj ) ) # --------------------------------------------------------------------------- Msj <- "Distribuci\u00f3n hist\u00f3rica de estudiantes graduados (desde el 2009-I al 2021-I)." Plot.Torta( datos = ejConsolidadoGrad, categoria = "TIPO_NIVEL", colores = col, titulo = gsub("DOS POR", "DOS\nPOR", Txt), libreria = "plotly", estilo = list( ply.Legend = "inside", ply.Credits = list( x = 0.8, y = 1.1, text = paste0("<b>", Msj, "</b>") ) ) )
Esta función proporciona excelentes herramientas y opciones para la visualización
de datos jerárquicos/estructurados como un conjunto de rectángulos anidados.
Cada grupo está representado por un rectángulo, cuya área (tamaño) es
proporcional a su frecuencia absoluta (recuento) y el color se usa para
mostrar otra dimensión numérica. Usando la interactividad, es posible representar
varias dimensiones/niveles: grupos, subgrupos, etc. Dicha gráfica se va a
representar usando la librería Highcharter
, Plotly
, d3treeR
, entre otras,
las cuales usan internamente JavaScript
.
Plot.Treemap( datos, variables, atributo, textFreq = "N", metodo = c("Classic", "Classic2", "Sunburst", "Sunburst2"), estadistico = c("Promedio", "Mediana", "Varianza", "SD", "CV", "Min", "Max"), colores, titulo = "", libreria = c("highcharter", "plotly"), estilo = NULL, estatico = FALSE )
Plot.Treemap( datos, variables, atributo, textFreq = "N", metodo = c("Classic", "Classic2", "Sunburst", "Sunburst2"), estadistico = c("Promedio", "Mediana", "Varianza", "SD", "CV", "Min", "Max"), colores, titulo = "", libreria = c("highcharter", "plotly"), estilo = NULL, estatico = FALSE )
datos |
Un data frame, no un vector numérico. |
variables |
Una lista (ya sea creada con la sintaxis |
atributo |
Una variable numérica dentro del data frame ingresado en |
textFreq |
Cadena de caracteres indicando el nombre que se le va a dar al recuento en cada uno de los grupos. Por defecto se emplea el rótulo "N". |
metodo |
Cadena de caracteres indicando el diseño con el cual se realizará
el gráfico (en el caso de ingresar dos niveles o más). Los valores permitidos
son |
estadistico |
Igual uso que en |
colores |
Igual uso que en |
titulo |
Cadena de caracteres indicando el título principal del plot. |
libreria |
Igual uso que en |
estilo |
Lista compuesta por varios parámetros, los cuales van a ser usados para graficar el treemap y cuyo objetivo es personalizar pequeños detalles de éste.
|
estatico |
Si es |
Si está trabajando en un R Markdown
o un aplicativo Shiny
no se puede usar
de forma conjunta el método = Classic
(o Classic2
) y método = Sunburst
(o Sunburst2
), pues se trata de un problema interno, ya que usan versiones
diferentes de d3
, puede darle seguimiento al problema
aquí. De igual forma,
si utiliza la librería sunburstR
en algunas ocasiones se le verán afectadas
las tablas creadas con DT
.
Retorna el treemap (objeto widget de HTML) creado. La clase del objeto retornado será un "htmlwidget" y dependiendo de la librería usada pertenecerá adicionalmente a la clase "highchart", "plotly", " d3tree", "d3tree2", "sunburst" o "sund2b".
Sabemos que puede ser abrumador el número de argumentos dentro del parámetro
estilo
, pero es necesario si queremos ofrecer al usuario la máxima
personalización dentro de cada función usando cualquier librería. Por tal
razón, a continuación, se detalla el listado completo de argumentos, usados
al especificar la librería y en qué función están presentes
(marcado con una × si lo posee).
Librería | estilo$ | Plot.Series() |
Plot.Barras() |
Plot.Apiladas() |
Plot.Boxplot() |
Plot.Radar() |
Plot.Treemap() |
Plot.Torta() |
Plot.Drilldown() |
— | gg.Tema | × | × | × | × | ||||
l | gg.Texto | × | × | × | × | ||||
l | gg.Legend | × | × | × | |||||
l | gg.Linea | × | |||||||
l | gg.Punto | × | |||||||
l | gg.Bar | × | × | ||||||
l | gg.VarWidth | × | |||||||
l | gg.OutShape | × | |||||||
l | gg.JitWidth | × | |||||||
l | gg.JitSize | × | |||||||
l | gg.Range | × | |||||||
ggplot2 | gg.plty | × | |||||||
l | gg.plwd | × | |||||||
l | gg.cglwd | × | |||||||
l | gg.cglcol | × | |||||||
l | gg.fontsize.title | × | |||||||
l | gg.fontsize.labels | × | |||||||
l | gg.fontcolor.labels | × | |||||||
l | gg.border.lwds | × | |||||||
l | gg.border.col | × | |||||||
l | gg.lowerbound.cex.labels | × | |||||||
l | gg.force.print.labels | × | |||||||
— | gg.overlap.labels | × | |||||||
» | hc.Tema | × | × | × | × | × | × | × | |
l | hc.Credits | × | × | × | × | × | × | × | |
highcharter | hc.BoxInfo | × | |||||||
l | hc.Slider | × | |||||||
» | hc.borderRadius | × | |||||||
• | ply.Credits | × | × | × | × | × | × | × | |
° | ply.Legend | × | × | ||||||
° | ply.LegendPosition | × | × | × | × | ||||
plotly | ply.Interaction | × | × | ||||||
° | ply.Relleno | × | |||||||
° | ply.Opacidad | × | × | ||||||
• | ply.LegendTitle | × | |||||||
dygraphs | dyg.LegendWidth | × | |||||||
» | dyg.Resaltar | × | |||||||
— | e.Tema | × | |||||||
l | e.Credits | × | |||||||
echarts4r | e.Forma | × | |||||||
l | e.LegType | × | |||||||
— | e.LegLoc | × | |||||||
library(viridis) Msj <- "Acompa\u00f1ado del Estad\u00edstico seleccionado para la Variable Edad." Plot.Treemap( datos = ejGraduados, variables = SEDE_NOMBRE_MAT, atributo = EDAD_MOD, textFreq = "Tamaño de la Muestra", estadistico = "Max", colores = inferno(10), titulo = "TOTAL DE GRADUADOS POR SEDE DE LA UNIVERSIDAD NACIONAL", libreria = "highcharter", estilo = list(hc.Tema = 7, hc.borderRadius = 20, hc.Credits = Msj) ) # --------------------------------------------------------------------------- Plot.Treemap( datos = ejGraduados, variables = FACULTAD, atributo = EDAD_MOD, textFreq = "n", estadistico = "CV", colores = turbo(10, direction = -1), titulo = "TOTAL DE GRADUADOS POR FACULTAD EN LA UNAL", libreria = "plotly", estilo = list(ply.Credits = list(x = 0.6, y = 1, text = Msj)) ) # --------------------------------------------------------------------------- # library(dplyr) misColores <- c( "#29ABE2", # AZUL CLARO | Amazonia "#8CC63F", # VERDE | Bogota "#CC241D", # ROJO | Caribe "#0071BC", # AZUL VIVO | Manizales "#F15A24", # NARANJA | Medellin "#FBB03B", # AMARILLO | Orinoquia "#93278F", # MORADO | Palmira "#8A381A" # GRIS | Tumaco ) Plot.Treemap( datos = ejGraduados, variables = vars(SEDE_NOMBRE_MAT, FACULTAD, PROGRAMA), metodo = "Classic", colores = misColores # "Set3" ) Plot.Treemap( datos = ejGraduados, variables = vars(SEDE_NOMBRE_MAT, FACULTAD, PROGRAMA), metodo = "Classic2", colores = "Set2" ) Plot.Treemap( datos = ejGraduados, variables = vars(SEDE_NOMBRE_MAT, FACULTAD, PROGRAMA), metodo = "Sunburst", colores = misColores, estilo = list(sun.Explanation = "All") ) Plot.Treemap( datos = ejGraduados, variables = vars(SEDE_NOMBRE_MAT, FACULTAD, PROGRAMA), metodo = "Sunburst", # colores = misColores, estilo = list( sun.Explanation = "All", sun.Color = list(range = c("#9E0142", "#D53E4F", "#F46D43", "#FDAE61", "#FEE08B", "#FFFFBF", "#E6F598", "#ABDDA4", "#66C2A5", "#3288BD", "#5E4FA2" ) ) ) ) Plot.Treemap( datos = ejGraduados, variables = vars(SEDE_NOMBRE_MAT, FACULTAD, PROGRAMA), metodo = "Sunburst2" ) Plot.Treemap( datos = ejGraduados, variables = vars(SEDE_NOMBRE_MAT, FACULTAD, PROGRAMA), metodo = "Sunburst2", colores = misColores, estilo = list(sun.showLabels = TRUE, sun.colorRoot = "#EF0055") ) # --------------------------------------------------------------------------- # Ejemplo usando el caso estático (treemap) # library(dplyr) Plot.Treemap( datos = ejGraduados, variables = vars(SEDE_NOMBRE_MAT, FACULTAD), colores = c("#FF3232", "#AFFF5E", "#FD6DB3", "#4CCAF2", "#FF9248", "#FBB03B"), titulo = "TOTAL DE GRADUADOS \u00d7 SEDE", estatico = TRUE, estilo = list( gg.fontsize.title = 12, gg.fontsize.labels = c(15, 9), gg.fontcolor.labels = c("#FFFFFF", "#212020"), gg.border.lwds = c(4, 2), gg.border.col = c("#73095D", "#D60D4B"), gg.lowerbound.cex.labels = 0.3, gg.overlap.labels = 0.1 ) )
library(viridis) Msj <- "Acompa\u00f1ado del Estad\u00edstico seleccionado para la Variable Edad." Plot.Treemap( datos = ejGraduados, variables = SEDE_NOMBRE_MAT, atributo = EDAD_MOD, textFreq = "Tamaño de la Muestra", estadistico = "Max", colores = inferno(10), titulo = "TOTAL DE GRADUADOS POR SEDE DE LA UNIVERSIDAD NACIONAL", libreria = "highcharter", estilo = list(hc.Tema = 7, hc.borderRadius = 20, hc.Credits = Msj) ) # --------------------------------------------------------------------------- Plot.Treemap( datos = ejGraduados, variables = FACULTAD, atributo = EDAD_MOD, textFreq = "n", estadistico = "CV", colores = turbo(10, direction = -1), titulo = "TOTAL DE GRADUADOS POR FACULTAD EN LA UNAL", libreria = "plotly", estilo = list(ply.Credits = list(x = 0.6, y = 1, text = Msj)) ) # --------------------------------------------------------------------------- # library(dplyr) misColores <- c( "#29ABE2", # AZUL CLARO | Amazonia "#8CC63F", # VERDE | Bogota "#CC241D", # ROJO | Caribe "#0071BC", # AZUL VIVO | Manizales "#F15A24", # NARANJA | Medellin "#FBB03B", # AMARILLO | Orinoquia "#93278F", # MORADO | Palmira "#8A381A" # GRIS | Tumaco ) Plot.Treemap( datos = ejGraduados, variables = vars(SEDE_NOMBRE_MAT, FACULTAD, PROGRAMA), metodo = "Classic", colores = misColores # "Set3" ) Plot.Treemap( datos = ejGraduados, variables = vars(SEDE_NOMBRE_MAT, FACULTAD, PROGRAMA), metodo = "Classic2", colores = "Set2" ) Plot.Treemap( datos = ejGraduados, variables = vars(SEDE_NOMBRE_MAT, FACULTAD, PROGRAMA), metodo = "Sunburst", colores = misColores, estilo = list(sun.Explanation = "All") ) Plot.Treemap( datos = ejGraduados, variables = vars(SEDE_NOMBRE_MAT, FACULTAD, PROGRAMA), metodo = "Sunburst", # colores = misColores, estilo = list( sun.Explanation = "All", sun.Color = list(range = c("#9E0142", "#D53E4F", "#F46D43", "#FDAE61", "#FEE08B", "#FFFFBF", "#E6F598", "#ABDDA4", "#66C2A5", "#3288BD", "#5E4FA2" ) ) ) ) Plot.Treemap( datos = ejGraduados, variables = vars(SEDE_NOMBRE_MAT, FACULTAD, PROGRAMA), metodo = "Sunburst2" ) Plot.Treemap( datos = ejGraduados, variables = vars(SEDE_NOMBRE_MAT, FACULTAD, PROGRAMA), metodo = "Sunburst2", colores = misColores, estilo = list(sun.showLabels = TRUE, sun.colorRoot = "#EF0055") ) # --------------------------------------------------------------------------- # Ejemplo usando el caso estático (treemap) # library(dplyr) Plot.Treemap( datos = ejGraduados, variables = vars(SEDE_NOMBRE_MAT, FACULTAD), colores = c("#FF3232", "#AFFF5E", "#FD6DB3", "#4CCAF2", "#FF9248", "#FBB03B"), titulo = "TOTAL DE GRADUADOS \u00d7 SEDE", estatico = TRUE, estilo = list( gg.fontsize.title = 12, gg.fontsize.labels = c(15, 9), gg.fontcolor.labels = c("#FFFFFF", "#212020"), gg.border.lwds = c(4, 2), gg.border.col = c("#73095D", "#D60D4B"), gg.lowerbound.cex.labels = 0.3, gg.overlap.labels = 0.1 ) )
Agregar()
UnalR viene con algunos archivos de ejemplo en su directorio inst/extdata
.
Esta función facilita el acceso a ellos.
read_example(ruta = NULL)
read_example(ruta = NULL)
ruta |
Nombre del archivo. Si es |
Cadena de caracteres indicando la ruta absoluta (no relativa a la carpeta en donde se ubique) en donde se encuentra el archivo especificado dentro del paquete.
read_example("TestConsolidado1.xlsx")
read_example("TestConsolidado1.xlsx")
Esta función permite representar un widget HTML como un objeto ráster
(imagen de mapa de bits), útil para reproducir gráficos interactivos en
archivos estáticos como un .pdf
generado por R Markdown
. Esta función usa
internamente los paquetes webshot
, htmlwidgets
, png
y grid
para poder
llevar a cabo su propósito.
StaticPlot(widgetHTML, height = 500, primeraVez = FALSE, ...)
StaticPlot(widgetHTML, height = 500, primeraVez = FALSE, ...)
widgetHTML |
Widget |
height |
Altura de la imagen estática a retornar. |
primeraVez |
Si es |
... |
Otros parámetros concernientes a la función webshot(),
sin considerar los ya usados dentro de la función ( |
No es necesario especificar el número del factor de zoom. El factor de zoom por defecto es 5, el cual dará como resultado cinco veces más de píxeles vertical y horizontalmente. Este valor fue seleccionado debido a que es el óptimo, un valor mayor ocasiona un tiempo de ejecución excesivamente alto y poca ganancia en cuanto a calidad, con un valor menor se tiene una pérdida considerable de calidad.
Si se especifican tanto el ancho como el alto, es probable que la imagen se distorsione. Por lo tanto, el único argumento variable será la altura de la imagen, dejando el ancho como un argumento adaptativo dependiendo del ancho disponible.
El tiempo de espera antes de tomar una captura de pantalla, en segundos, es de
. Este valor es debido a que se necesita un retraso mayor para que los
gráficos generados por
Highcharter
se muestren correctamente.
Una imagen estática.
misColores <- c( "#29ABE2", # AZUL CLARO | Amazonia "#8CC63F", # VERDE | Bogota "#CC241D", # ROJO | Caribe "#0071BC", # AZUL VIVO | Manizales "#F15A24", # NARANJA | Medellin "#FBB03B", # AMARILLO | Orinoquia "#93278F", # MORADO | Palmira "#8A381A" # GRIS | Tumaco ) figure <- Plot.Series( datos = ejConsolidadoGrad, categoria = "SEDE_NOMBRE_ADM", colores = misColores, libreria = "highcharter" ) StaticPlot(figure, primeraVez = TRUE) figure2 <- Plot.Torta( datos = ejConsolidadoGrad, categoria = "SEXO", ano = 2021, periodo = 1, colores = c("#116BEE", "#E62272"), titulo = "DISTRIBUCI\u00d3N DE GRADUADOS POR SEXO", libreria = "highcharter" ) StaticPlot(figure2)
misColores <- c( "#29ABE2", # AZUL CLARO | Amazonia "#8CC63F", # VERDE | Bogota "#CC241D", # ROJO | Caribe "#0071BC", # AZUL VIVO | Manizales "#F15A24", # NARANJA | Medellin "#FBB03B", # AMARILLO | Orinoquia "#93278F", # MORADO | Palmira "#8A381A" # GRIS | Tumaco ) figure <- Plot.Series( datos = ejConsolidadoGrad, categoria = "SEDE_NOMBRE_ADM", colores = misColores, libreria = "highcharter" ) StaticPlot(figure, primeraVez = TRUE) figure2 <- Plot.Torta( datos = ejConsolidadoGrad, categoria = "SEXO", ano = 2021, periodo = 1, colores = c("#116BEE", "#E62272"), titulo = "DISTRIBUCI\u00d3N DE GRADUADOS POR SEXO", libreria = "highcharter" ) StaticPlot(figure2)
DT
Esta función está diseñada para facilitar/simplificar la creación/producción de tablas para informes, presentaciones y
publicaciones, produciendo un widget HTML para visualizar un data frame
utilizando el paquete DT
. La forma en que esta función maneja las cosas por
usted significa que a menudo no tiene que preocuparse por los pequeños detalles
para obtener un resultado impresionante y listo para usar.
Tabla( datos, df, rows, pivotCat, pivotVar, columnNames, filtros = FALSE, colFilters, estadistico = c("Suma", "Promedio", "Mediana", "Varianza", "SD", "CV", "Min", "Max"), encabezado = "Encabezados de los Niveles de la Categoría", leyenda = "", tituloPdf = NULL, mensajePdf = "", ajustarNiveles = TRUE, scrollX = TRUE, fillContainer = NULL, colorHead = "#FFFFFF", estilo, estatico = FALSE )
Tabla( datos, df, rows, pivotCat, pivotVar, columnNames, filtros = FALSE, colFilters, estadistico = c("Suma", "Promedio", "Mediana", "Varianza", "SD", "CV", "Min", "Max"), encabezado = "Encabezados de los Niveles de la Categoría", leyenda = "", tituloPdf = NULL, mensajePdf = "", ajustarNiveles = TRUE, scrollX = TRUE, fillContainer = NULL, colorHead = "#FFFFFF", estilo, estatico = FALSE )
datos |
Un data frame. |
df |
Argument deprecated, use |
rows |
Una variable categórica dentro del data frame ingresado en |
pivotCat |
Variable categórica que contiene los niveles/factores que desea pivotear como columnas. Si omite este parámetro se da por hecho que no desea pivotear nada sino graficar tal cual su data frame |
pivotVar |
Variable numérica que contiene los valores que desea colocar en cada celda al realizar el pivotaje. |
columnNames |
Vector de caracteres que especifica los nombres de las columnas
de la tabla a retornar. Si no se introduce algún valor se tomará el mismo
nombre de las columnas presentes en |
filtros |
Si es |
colFilters |
Vector numérico que especifica las columnas a las cuales les desea agregar la opción de poder filtrar. Si no se introduce algún valor todas las columnas tendrán habilitada la opción de poder filtrar. |
estadistico |
X. |
encabezado |
Cadena de caracteres que describe los distintos niveles de
la variable |
leyenda |
Cadena de caracteres que describe información adicional de la
tabla, ésta se sitúa en la parte inferior de la tabla de manera centrada,
dicho texto se visualizará en todas las opciones de descarga. Su valor por
defecto es |
tituloPdf |
Cadena de caracteres que proporciona un título a la tabla al
momento de generar el |
mensajePdf |
Cadena de caracteres que proporciona un mensaje situado entre
el título y la tabla. Se visualizará tanto al generar el |
ajustarNiveles |
Si es |
scrollX |
Si es |
fillContainer |
Valor booleano para indicar si desea que la tabla rellene automáticamente el elemento que lo contiene. |
colorHead |
Cadena de caracteres que indica el color de fondo de la cabecera
de la tabla. Puede indicar el color con el nombre ( |
estilo |
Una lista compuesta por listas las cuales en su interior contiene argumentos válidos de la función formatStyle(), esto con la finalidad de que pueda aplicar estilos CSS a la tabla, tales como color de la fuente, color de fondo, tamaño de fuente, etc. Puede encontrar mayor información de los argumentos disponibles aquí.
|
estatico |
Si es |
Esta función se basa enteramente del paquete DT
, el cual proporciona una
interfaz para R
a la biblioteca DataTables
de JavaScript
. Los data frames
de R
se pueden mostrar como tablas en páginas HTML, proporcionando opciones
de filtrado, paginación, clasificación y muchas otras características en las
tablas.
Esta función se basa enteramente del paquete DT
, el cual proporciona una interfaz
para R
a la biblioteca DataTables
de JavaScript
. Los data frames de R
se pueden mostrar como tablas en páginas HTML, proporcionando opciones de
filtrado, paginación, clasificación y muchas otras características en las tablas.
Al establecer filtros = FALSE
no elimina ni modifica el filtro global
(cuadro de búsqueda en la parte superior derecha).
Para el argumento colFilters
recuerde que la numeración inicia en 0, es decir,
la primera columna tiene asociado el índice 0, la segunda el 1, y así sucesivamente.
Retorna la tabla creada mediante DT
la cual pertenece a la clase "datatables"
y "htmlwidget".
# library(DT); library(dplyr); library(tidyr) # Example of R Combinations with Dot (".") and Pipe (%>%) Operator # UnalR::Agregar( # datos = UnalData::Graduados, # formula = SEDE_NOMBRE_ADM ~ YEAR + SEMESTRE, # frecuencia = list("Year" = 2009:2022, "Period" = 1:2) # ) |> # select(-Variable) |> # rename(Year = YEAR, Semester = SEMESTRE, Cat = Clase) %>% # Tabla( # ., rows = vars(Year, Semester), pivotCat = Cat, pivotVar = Total # ) Tabla( datos = ejConsolidadoGrad |> dplyr::filter(Variable == "SEDE_NOMBRE_ADM") |> dplyr::select(-Variable), rows = vars(YEAR, SEMESTRE), pivotCat = Clase, pivotVar = Total, columnNames = c("Año", "Semestre", "Total"), estadistico = "Suma", encabezado = "TOTAL DE ESTUDIANTES \u00d7 SEDE DE GRADUACI\u00d3N", leyenda = "Distribuci\u00f3n de estudiantes graduados (desde el 2009-I al 2021-I) por sede.", tituloPdf = "ESTUDIANTES GRADUADOS POR SEDE", colorHead = "#8CC63F", estilo = list( list( columns = "YEAR", target = "cell", fontWeight = "normal", backgroundColor = styleEqual( unique(ejConsolidadoGrad$YEAR), rainbow(13, alpha = 0.5, rev = TRUE) ) ), list( columns = "SEMESTRE", target = "cell", fontWeight = "bold", color = styleEqual(unique(ejConsolidadoGrad$SEMESTRE), c("#EB0095", "#9D45FD")) ) ) ) # --------------------------------------------------------------------------- VariosYears <- ejConsolidadoSaberPro2019 |> mutate(YEAR = replace(YEAR, YEAR==2019, 2020)) |> bind_rows(ejConsolidadoSaberPro2019) |> filter(Variable == "sede") |> select(-Variable, -desv) Msj <- "\u00c9sta es una descripci\u00f3n de la tabla diferente al valor por default." Tabla( datos = VariosYears, rows = vars(YEAR, Clase, n), pivotCat = Componente, pivotVar = Total, columnNames = c("Año", "Sede", "n", "M\u00e1ximo"), estadistico = "Max", encabezado = "PUNTAJES \u00d7 SEDE", leyenda = Msj, colorHead = "#F9CA00", estilo = list( list( columns = "YEAR", target = "cell", fontWeight = "normal", backgroundColor = styleEqual(unique(VariosYears$YEAR), c("#AEF133", "#19EE9F")) ), list( columns = "Clase", target = "cell", fontWeight = "bold", color = styleEqual(unique(VariosYears$Clase), c("#42C501", "#7E10DE", "#FF6700", "#0096F2")) ) ) ) # --------------------------------------------------------------------------- Tabla(datos = datasets::mtcars) df <- ejGraduados |> filter(TIPO_NIVEL == "Pregrado") |> group_by(YEAR, SEMESTRE, DEP_NAC, CIU_NAC, SEXO, CAT_EDAD, ESTRATO, PROGRAMA) |> summarise(Total = n(), .groups = "drop") |> mutate(across(where(is.character), \(x) replace_na(x, replace = "SIN INFO"))) Nombres <- c("<em>A\u00f1o</em>", "Semestre", "Departamento", "Municipio", "Sexo", "Edad", "Estrato", "Carrera", "Total" ) Titulo <- paste( "<b>HIST\u00d3RICO DEL TOTAL DE GRADUADOS DE PREGRADO ", "DEPENDIENDO DE LAS VARIABLES SELECCIONADAS</b>" ) Tabla( datos = df, columnNames = Nombres, filtros = TRUE, colFilters = 0:3, encabezado = Titulo, leyenda = "N\u00famero de graduados de pregrado por lugar de procedencia.", tituloPdf = "Este es un t\u00edtulo provisional para el PDF", mensajePdf = "Este es un mensaje provisional para el PDF", ajustarNiveles = TRUE, colorHead = "#4CFF49", estilo = list( list( columns = "YEAR", target = "cell", fontWeight = "bold", backgroundColor = styleEqual(unique(df$YEAR), c("#FF6400", "#01CDFE", "#FF0532")) ), list( columns = "SEMESTRE", target = "cell", fontWeight = "bold", color = styleEqual(unique(df$SEMESTRE), c("#3D3397", "#AE0421")) ), list(columns = "DEP_NAC", color = "#FFFFFF", backgroundColor = "#4D1B7B"), list(columns = "CIU_NAC", color = "#FFFFFF", backgroundColor = "#F59E11") ) ) # library(tibble) # --------------------------------------------------------------------------- # Ejemplo Usando Directamente un Consolidado de Microdatos (Compose functions with Agregar) set.seed(2023) AcademyAwards <- tibble( year = sample(1939:1945, 100, TRUE), season = sample(1:2, 100, TRUE), category = sample( c("Best Picture", "Best Director", "Best Actor", "Best Actress", "Best Sound"), 100, TRUE ), location = sample(c("Roosevelt Hotel", "Dolby Theatre", "NBC Century Theatre"), 100, TRUE) ) Agregar( datos = AcademyAwards, formula = category + location ~ year + season, frecuencia = list("Year" = 1939:1945, "Period" = 1:2) ) %>% Tabla(., pivotCat = "location", columnNames = c("Year", "Season"), encabezado = "LOCATION OF CEREMONIES", scrollX = FALSE ) # library(gt); library(gtExtras) # --------------------------------------------------------------------------- # Ejemplo usando el caso estático (gt) tableGT <- Tabla( datos = UnalR::ejConsolidadoGrad |> filter(Variable == "SEDE_NOMBRE_ADM"), rows = vars(YEAR), pivotCat = Clase, pivotVar = Total, encabezado = "TOTAL DE ESTUDIANTES \u00d7 SEDE DE GRADUACI\u00d3N", leyenda = paste( "Distribuci\u00f3n de estudiantes graduados ", "(desde el 2009-I al 2021-I) por sede." ), colorHead = "#8CC63F", estatico = TRUE, estilo = list( Tema = 11, Padding = c(0, 0.5), Titulo = "Summary Table:", Color = list( list(columns = "YEAR" , backgroundColor = rainbow(12, alpha = 0.5, rev = TRUE)), list(columns = "Palmira" , backgroundColor = "ggsci::red_material"), list(columns = "Manizales", backgroundColor = "viridis") ) ) ) # --------------------------------------------------------------------------- # Ejemplo usando algunos parámetros adicionales de personalización de gt/gtExtras # (para ver el alcance que puede tener) tableGT <- Tabla( datos = UnalR::ejConsolidadoGrad |> filter(Variable == "SEDE_NOMBRE_ADM"), rows = vars(YEAR, SEMESTRE), pivotCat = Clase, pivotVar = Total, estadistico = "Suma", encabezado = "TOTAL DE ESTUDIANTES \u00d7 SEDE DE GRADUACI\u00d3N", leyenda = paste( "Distribuci\u00f3n de estudiantes graduados ", "(desde el 2009-I al 2021-I) por sede." ), colorHead = "#AA0000", estatico = TRUE, estilo = list( Tema = 14, Padding = c(0, 0.5), Titulo = "SUMMARY TABLE", Color = list( list(columns = "YEAR" , backgroundColor = rainbow(12, alpha = 0.5, rev = TRUE)), list(columns = "SEMESTRE" , backgroundColor = c("#EB0095", "#9D45FD")) ) ) ) Win <- "<span style=\"color:green\">💪</span>" Loss <- "<span style=\"color:red\">💥</span>" tableGT |> # __________________ INSERTANDO UN PIE DE PÁGINA ADICIONAL ___________________ tab_source_note(source_note = "Source: Dirección Nacional de Planeación y Estadística (DNPE).") |> # ___________________ CREANDO UN GRUPO/COLECCIÓN DE FILAS ____________________ tab_row_group(label = "< 2010" , rows = 1:2) |> tab_row_group(label = "[2010 - 2019]", rows = 3:22) |> tab_row_group(label = ">= 2020" , rows = 23:25) |> # __________ MODIFICANDO LA ALINEACIÓN DE CADA UNA DE LAS COLUMNAS ___________ cols_align(align = "center", columns = Amazonía:Tumaco) |> cols_align(align = "left" , columns = where(is.factor)) |> # ___________________ COLOREANDO LAS CELDAS DE UNA COLUMNA ___________________ data_color( columns = Statistic, method = "bin", bins = c(0, 3000, 4500, 10000), palette = c("#F44336", "#34AEC6", "#76CF44") ) |> # ___________ MODIFICANDO ASPECTOS GENERALES/GLOBALES DE LA TABLA ____________ tab_options( heading.align = "right", heading.background.color = "#490948", table.font.size = px(12), heading.title.font.size = px(16) ) |> # ______________ CAMBIANDO EL FORMATO DE LOS VALORES NUMÉRICOS _______________ fmt_currency(columns = c(Orinoquía:Palmira), currency = "USD") |> fmt_percent(columns = Tumaco, decimals = 1) |> # _ AÑADIENDO ALGUNOS DE LOS ESTILOS PERSONALIZADOS DISPONIBLES A LAS CELDAS _ tab_style( style = cell_fill(color = "#C90076"), locations = cells_column_spanners() ) |> tab_style( style = list(cell_text(color = "#A5FD45", style = "italic")), locations = cells_body(columns = SEMESTRE, rows = SEMESTRE == "1") ) |> tab_style_body( style = cell_text(color = "#0CEAC0", weight = "bold"), columns = Amazonía, fn = function(x) between(x, 5, 20) ) |> text_transform( fn = function(x) paste(x, Win), locations = cells_body(columns = "Caribe", rows = Bogotá > 3*Medellín) ) |> text_transform( fn = function(x) paste(x, Loss), locations = cells_body(columns = "Caribe", rows = Bogotá < 3*Medellín) ) |> # __________________________ MODIFICANDO LA FUENTE ___________________________ opt_table_font( # font = google_font(name = "Merriweather"), stack = "rounded-sans", weight = "bolder" ) |> # ____________ OPCIONES ADICIONALES CON LIBRERÍAS COMPLEMENTARIAS ____________ gtExtras::gt_highlight_rows(rows = 18, fill = "#FEEF05", font_weight = "bold") |> gtExtras::gt_add_divider(Bogotá, color = "#F94D00", style = "dotted", weight = px(4)) |> gtExtras::gt_plt_bar_pct(Medellín, fill = "#2A8A9C", background = "#0DC8A7", scaled = FALSE) # Use el siguiente comando si desea guardar la tabla estática obtenida: # gtsave(tableGT, "TablaResumen.html") # O .tex, docx
# library(DT); library(dplyr); library(tidyr) # Example of R Combinations with Dot (".") and Pipe (%>%) Operator # UnalR::Agregar( # datos = UnalData::Graduados, # formula = SEDE_NOMBRE_ADM ~ YEAR + SEMESTRE, # frecuencia = list("Year" = 2009:2022, "Period" = 1:2) # ) |> # select(-Variable) |> # rename(Year = YEAR, Semester = SEMESTRE, Cat = Clase) %>% # Tabla( # ., rows = vars(Year, Semester), pivotCat = Cat, pivotVar = Total # ) Tabla( datos = ejConsolidadoGrad |> dplyr::filter(Variable == "SEDE_NOMBRE_ADM") |> dplyr::select(-Variable), rows = vars(YEAR, SEMESTRE), pivotCat = Clase, pivotVar = Total, columnNames = c("Año", "Semestre", "Total"), estadistico = "Suma", encabezado = "TOTAL DE ESTUDIANTES \u00d7 SEDE DE GRADUACI\u00d3N", leyenda = "Distribuci\u00f3n de estudiantes graduados (desde el 2009-I al 2021-I) por sede.", tituloPdf = "ESTUDIANTES GRADUADOS POR SEDE", colorHead = "#8CC63F", estilo = list( list( columns = "YEAR", target = "cell", fontWeight = "normal", backgroundColor = styleEqual( unique(ejConsolidadoGrad$YEAR), rainbow(13, alpha = 0.5, rev = TRUE) ) ), list( columns = "SEMESTRE", target = "cell", fontWeight = "bold", color = styleEqual(unique(ejConsolidadoGrad$SEMESTRE), c("#EB0095", "#9D45FD")) ) ) ) # --------------------------------------------------------------------------- VariosYears <- ejConsolidadoSaberPro2019 |> mutate(YEAR = replace(YEAR, YEAR==2019, 2020)) |> bind_rows(ejConsolidadoSaberPro2019) |> filter(Variable == "sede") |> select(-Variable, -desv) Msj <- "\u00c9sta es una descripci\u00f3n de la tabla diferente al valor por default." Tabla( datos = VariosYears, rows = vars(YEAR, Clase, n), pivotCat = Componente, pivotVar = Total, columnNames = c("Año", "Sede", "n", "M\u00e1ximo"), estadistico = "Max", encabezado = "PUNTAJES \u00d7 SEDE", leyenda = Msj, colorHead = "#F9CA00", estilo = list( list( columns = "YEAR", target = "cell", fontWeight = "normal", backgroundColor = styleEqual(unique(VariosYears$YEAR), c("#AEF133", "#19EE9F")) ), list( columns = "Clase", target = "cell", fontWeight = "bold", color = styleEqual(unique(VariosYears$Clase), c("#42C501", "#7E10DE", "#FF6700", "#0096F2")) ) ) ) # --------------------------------------------------------------------------- Tabla(datos = datasets::mtcars) df <- ejGraduados |> filter(TIPO_NIVEL == "Pregrado") |> group_by(YEAR, SEMESTRE, DEP_NAC, CIU_NAC, SEXO, CAT_EDAD, ESTRATO, PROGRAMA) |> summarise(Total = n(), .groups = "drop") |> mutate(across(where(is.character), \(x) replace_na(x, replace = "SIN INFO"))) Nombres <- c("<em>A\u00f1o</em>", "Semestre", "Departamento", "Municipio", "Sexo", "Edad", "Estrato", "Carrera", "Total" ) Titulo <- paste( "<b>HIST\u00d3RICO DEL TOTAL DE GRADUADOS DE PREGRADO ", "DEPENDIENDO DE LAS VARIABLES SELECCIONADAS</b>" ) Tabla( datos = df, columnNames = Nombres, filtros = TRUE, colFilters = 0:3, encabezado = Titulo, leyenda = "N\u00famero de graduados de pregrado por lugar de procedencia.", tituloPdf = "Este es un t\u00edtulo provisional para el PDF", mensajePdf = "Este es un mensaje provisional para el PDF", ajustarNiveles = TRUE, colorHead = "#4CFF49", estilo = list( list( columns = "YEAR", target = "cell", fontWeight = "bold", backgroundColor = styleEqual(unique(df$YEAR), c("#FF6400", "#01CDFE", "#FF0532")) ), list( columns = "SEMESTRE", target = "cell", fontWeight = "bold", color = styleEqual(unique(df$SEMESTRE), c("#3D3397", "#AE0421")) ), list(columns = "DEP_NAC", color = "#FFFFFF", backgroundColor = "#4D1B7B"), list(columns = "CIU_NAC", color = "#FFFFFF", backgroundColor = "#F59E11") ) ) # library(tibble) # --------------------------------------------------------------------------- # Ejemplo Usando Directamente un Consolidado de Microdatos (Compose functions with Agregar) set.seed(2023) AcademyAwards <- tibble( year = sample(1939:1945, 100, TRUE), season = sample(1:2, 100, TRUE), category = sample( c("Best Picture", "Best Director", "Best Actor", "Best Actress", "Best Sound"), 100, TRUE ), location = sample(c("Roosevelt Hotel", "Dolby Theatre", "NBC Century Theatre"), 100, TRUE) ) Agregar( datos = AcademyAwards, formula = category + location ~ year + season, frecuencia = list("Year" = 1939:1945, "Period" = 1:2) ) %>% Tabla(., pivotCat = "location", columnNames = c("Year", "Season"), encabezado = "LOCATION OF CEREMONIES", scrollX = FALSE ) # library(gt); library(gtExtras) # --------------------------------------------------------------------------- # Ejemplo usando el caso estático (gt) tableGT <- Tabla( datos = UnalR::ejConsolidadoGrad |> filter(Variable == "SEDE_NOMBRE_ADM"), rows = vars(YEAR), pivotCat = Clase, pivotVar = Total, encabezado = "TOTAL DE ESTUDIANTES \u00d7 SEDE DE GRADUACI\u00d3N", leyenda = paste( "Distribuci\u00f3n de estudiantes graduados ", "(desde el 2009-I al 2021-I) por sede." ), colorHead = "#8CC63F", estatico = TRUE, estilo = list( Tema = 11, Padding = c(0, 0.5), Titulo = "Summary Table:", Color = list( list(columns = "YEAR" , backgroundColor = rainbow(12, alpha = 0.5, rev = TRUE)), list(columns = "Palmira" , backgroundColor = "ggsci::red_material"), list(columns = "Manizales", backgroundColor = "viridis") ) ) ) # --------------------------------------------------------------------------- # Ejemplo usando algunos parámetros adicionales de personalización de gt/gtExtras # (para ver el alcance que puede tener) tableGT <- Tabla( datos = UnalR::ejConsolidadoGrad |> filter(Variable == "SEDE_NOMBRE_ADM"), rows = vars(YEAR, SEMESTRE), pivotCat = Clase, pivotVar = Total, estadistico = "Suma", encabezado = "TOTAL DE ESTUDIANTES \u00d7 SEDE DE GRADUACI\u00d3N", leyenda = paste( "Distribuci\u00f3n de estudiantes graduados ", "(desde el 2009-I al 2021-I) por sede." ), colorHead = "#AA0000", estatico = TRUE, estilo = list( Tema = 14, Padding = c(0, 0.5), Titulo = "SUMMARY TABLE", Color = list( list(columns = "YEAR" , backgroundColor = rainbow(12, alpha = 0.5, rev = TRUE)), list(columns = "SEMESTRE" , backgroundColor = c("#EB0095", "#9D45FD")) ) ) ) Win <- "<span style=\"color:green\">💪</span>" Loss <- "<span style=\"color:red\">💥</span>" tableGT |> # __________________ INSERTANDO UN PIE DE PÁGINA ADICIONAL ___________________ tab_source_note(source_note = "Source: Dirección Nacional de Planeación y Estadística (DNPE).") |> # ___________________ CREANDO UN GRUPO/COLECCIÓN DE FILAS ____________________ tab_row_group(label = "< 2010" , rows = 1:2) |> tab_row_group(label = "[2010 - 2019]", rows = 3:22) |> tab_row_group(label = ">= 2020" , rows = 23:25) |> # __________ MODIFICANDO LA ALINEACIÓN DE CADA UNA DE LAS COLUMNAS ___________ cols_align(align = "center", columns = Amazonía:Tumaco) |> cols_align(align = "left" , columns = where(is.factor)) |> # ___________________ COLOREANDO LAS CELDAS DE UNA COLUMNA ___________________ data_color( columns = Statistic, method = "bin", bins = c(0, 3000, 4500, 10000), palette = c("#F44336", "#34AEC6", "#76CF44") ) |> # ___________ MODIFICANDO ASPECTOS GENERALES/GLOBALES DE LA TABLA ____________ tab_options( heading.align = "right", heading.background.color = "#490948", table.font.size = px(12), heading.title.font.size = px(16) ) |> # ______________ CAMBIANDO EL FORMATO DE LOS VALORES NUMÉRICOS _______________ fmt_currency(columns = c(Orinoquía:Palmira), currency = "USD") |> fmt_percent(columns = Tumaco, decimals = 1) |> # _ AÑADIENDO ALGUNOS DE LOS ESTILOS PERSONALIZADOS DISPONIBLES A LAS CELDAS _ tab_style( style = cell_fill(color = "#C90076"), locations = cells_column_spanners() ) |> tab_style( style = list(cell_text(color = "#A5FD45", style = "italic")), locations = cells_body(columns = SEMESTRE, rows = SEMESTRE == "1") ) |> tab_style_body( style = cell_text(color = "#0CEAC0", weight = "bold"), columns = Amazonía, fn = function(x) between(x, 5, 20) ) |> text_transform( fn = function(x) paste(x, Win), locations = cells_body(columns = "Caribe", rows = Bogotá > 3*Medellín) ) |> text_transform( fn = function(x) paste(x, Loss), locations = cells_body(columns = "Caribe", rows = Bogotá < 3*Medellín) ) |> # __________________________ MODIFICANDO LA FUENTE ___________________________ opt_table_font( # font = google_font(name = "Merriweather"), stack = "rounded-sans", weight = "bolder" ) |> # ____________ OPCIONES ADICIONALES CON LIBRERÍAS COMPLEMENTARIAS ____________ gtExtras::gt_highlight_rows(rows = 18, fill = "#FEEF05", font_weight = "bold") |> gtExtras::gt_add_divider(Bogotá, color = "#F94D00", style = "dotted", weight = px(4)) |> gtExtras::gt_plt_bar_pct(Medellín, fill = "#2A8A9C", background = "#0DC8A7", scaled = FALSE) # Use el siguiente comando si desea guardar la tabla estática obtenida: # gtsave(tableGT, "TablaResumen.html") # O .tex, docx
DT
Esta función simplifica la producción de tablas para presentaciones visualmente
atractivas, pues está diseñada para facilitar la creación de tablas para informes
y publicaciones produciendo un widget HTML para visualizar un data frame utilizando
el paquete DT
.
Tabla.General( datos, colNames, filtros = FALSE, colFilters, encabezado = "", leyenda = "", tituloPdf = NULL, mensajePdf = "", ajustarNiveles = TRUE, scrollX = TRUE, colorHead = "#FFFFFF", estilo )
Tabla.General( datos, colNames, filtros = FALSE, colFilters, encabezado = "", leyenda = "", tituloPdf = NULL, mensajePdf = "", ajustarNiveles = TRUE, scrollX = TRUE, colorHead = "#FFFFFF", estilo )
datos |
Un data frame o una matriz. |
colNames |
Vector de caracteres que especifica los nombres de las columnas
de la tabla a retornar. Si no se introduce algún valor se tomará el mismo
nombre de las columnas presentes en |
filtros |
Si es |
colFilters |
Vector numérico que especifica las columnas a las cuales les desea agregar la opción de poder filtrar. Si no se introduce algún valor todas las columnas tendrán habilitada la opción de poder filtrar. |
encabezado |
Igual uso que en |
leyenda |
Igual uso que en |
tituloPdf |
Igual uso que en |
mensajePdf |
Igual uso que en |
ajustarNiveles |
Igual uso que en |
scrollX |
Igual uso que en |
colorHead |
Igual uso que en |
estilo |
Una lista compuesta por listas las cuales en su interior contiene argumentos válidos de la función formatStyle(), esto con la finalidad de que pueda aplicar estilos CSS a la tabla, tales como color de la fuente, color de fondo, tamaño de fuente, etc. Puede encontrar mayor información de los argumentos disponibles aquí. |
Esta función se basa enteramente del paquete DT
, el cual proporciona una interfaz
para R
a la biblioteca DataTables
de JavaScript
. Los data frames de R
se pueden mostrar como tablas en páginas HTML, proporcionando opciones de
filtrado, paginación, clasificación y muchas otras características en las tablas.
Al establecer filtros = FALSE
no elimina ni modifica el filtro global
(cuadro de búsqueda en la parte superior derecha).
Para el argumento colFilters
recuerde que la numeración inicia en 0, es decir,
la primera columna tiene asociado el índice 0, la segunda el 1, y así sucesivamente.
Retorna la tabla creada mediante DT
la cual pertenece a la clase "datatables"
y "htmlwidget".
Tabla.General(datos = datasets::mtcars) # library("dplyr"); library("tidyr"); library("DT") df <- ejGraduados |> filter(TIPO_NIVEL == "Pregrado") |> group_by(YEAR, SEMESTRE, DEP_NAC, CIU_NAC, SEXO, CAT_EDAD, ESTRATO, PROGRAMA) |> summarise(Total = n(), .groups = "drop") |> mutate(across(where(is.character), \(x) replace_na(x, replace = "SIN INFO"))) Nombres <- c("<em>A\u00f1o</em>", "Semestre", "Departamento", "Municipio", "Sexo", "Edad", "Estrato", "Carrera", "Total" ) Titulo <- paste( "<b>HIST\u00d3RICO DEL TOTAL DE GRADUADOS DE PREGRADO ", "DEPENDIENDO DE LAS VARIABLES SELECCIONADAS</b>" ) Tabla.General( datos = df, colNames = Nombres, filtros = TRUE, colFilters = 0:3, encabezado = Titulo, leyenda = "N\u00famero de graduados de pregrado por lugar de procedencia.", tituloPdf = "Este es un t\u00edtulo provisional para el PDF", mensajePdf = "Este es un mensaje provisional para el PDF", ajustarNiveles = TRUE, colorHead = "#4CFF49", estilo = list( list( columns = "YEAR", target = "cell", fontWeight = "bold", backgroundColor = styleEqual(unique(df$YEAR), c("#FF6400", "#01CDFE", "#FF0532")) ), list( columns = "SEMESTRE", target = "cell", fontWeight = "bold", color = styleEqual(unique(df$SEMESTRE), c("#3D3397", "#AE0421")) ), list(columns = "DEP_NAC", color = "#FFFFFF", backgroundColor = "#4D1B7B"), list(columns = "CIU_NAC", color = "#FFFFFF", backgroundColor = "#F59E11") ) )
Tabla.General(datos = datasets::mtcars) # library("dplyr"); library("tidyr"); library("DT") df <- ejGraduados |> filter(TIPO_NIVEL == "Pregrado") |> group_by(YEAR, SEMESTRE, DEP_NAC, CIU_NAC, SEXO, CAT_EDAD, ESTRATO, PROGRAMA) |> summarise(Total = n(), .groups = "drop") |> mutate(across(where(is.character), \(x) replace_na(x, replace = "SIN INFO"))) Nombres <- c("<em>A\u00f1o</em>", "Semestre", "Departamento", "Municipio", "Sexo", "Edad", "Estrato", "Carrera", "Total" ) Titulo <- paste( "<b>HIST\u00d3RICO DEL TOTAL DE GRADUADOS DE PREGRADO ", "DEPENDIENDO DE LAS VARIABLES SELECCIONADAS</b>" ) Tabla.General( datos = df, colNames = Nombres, filtros = TRUE, colFilters = 0:3, encabezado = Titulo, leyenda = "N\u00famero de graduados de pregrado por lugar de procedencia.", tituloPdf = "Este es un t\u00edtulo provisional para el PDF", mensajePdf = "Este es un mensaje provisional para el PDF", ajustarNiveles = TRUE, colorHead = "#4CFF49", estilo = list( list( columns = "YEAR", target = "cell", fontWeight = "bold", backgroundColor = styleEqual(unique(df$YEAR), c("#FF6400", "#01CDFE", "#FF0532")) ), list( columns = "SEMESTRE", target = "cell", fontWeight = "bold", color = styleEqual(unique(df$SEMESTRE), c("#3D3397", "#AE0421")) ), list(columns = "DEP_NAC", color = "#FFFFFF", backgroundColor = "#4D1B7B"), list(columns = "CIU_NAC", color = "#FFFFFF", backgroundColor = "#F59E11") ) )
DT
Esta función está diseñada para facilitar la creación de tablas para informes
y publicaciones produciendo un widget HTML para visualizar un data frame utilizando
el paquete DT
. La forma en que esta función maneja las cosas por usted significa
que a menudo no tiene que preocuparse por los pequeños detalles para obtener
un resultado impresionante y listo para usar.
Tabla.SaberPro( datos, variable, encabezado = "Encabezados de los Niveles de la Categoría", leyenda, tituloPdf = NULL, mensajePdf = "", ajustarNiveles = TRUE, scrollX = TRUE, colorHead = "#FFFFFF", colorear = FALSE, estilo )
Tabla.SaberPro( datos, variable, encabezado = "Encabezados de los Niveles de la Categoría", leyenda, tituloPdf = NULL, mensajePdf = "", ajustarNiveles = TRUE, scrollX = TRUE, colorHead = "#FFFFFF", colorear = FALSE, estilo )
datos |
Igual uso que en |
variable |
Análogo al argumento |
encabezado |
Igual uso que en |
leyenda |
Igual uso que en |
tituloPdf |
Igual uso que en |
mensajePdf |
Igual uso que en |
ajustarNiveles |
Igual uso que en |
scrollX |
Igual uso que en |
colorHead |
Igual uso que en |
colorear |
Igual uso que en |
estilo |
Una lista compuesta por dos parámetros:
|
Esta función se basa enteramente del paquete DT
, el cual proporciona una
interfaz para R
a la biblioteca DataTables
de JavaScript
. Los data frames
de R
se pueden mostrar como tablas en páginas HTML, proporcionando opciones
de filtrado, paginación, clasificación y muchas otras características en las
tablas.
Retorna la tabla creada mediante DT
la cual pertenece a la clase "datatables" y "htmlwidget".
if (require("dplyr")) { VariosYears <- ejConsolidadoSaberPro2019 |> mutate(YEAR = replace(YEAR, YEAR==2019, 2020)) |> bind_rows(ejConsolidadoSaberPro2019) } Msj <- "\u00c9sta es una descripci\u00f3n de la tabla diferente al valor por default." Tabla.SaberPro( datos = VariosYears, variable = "SEXO", encabezado = "PUNTAJES POR SEXO", leyenda = Msj, colorHead = "#FF5B5B", estilo = list( PaletaYear = c("#F9CA00", "#F68118"), PaletaCategoria = c("#2458C5", "#F0006D", "#42C501") ) ) Tabla.SaberPro( datos = VariosYears, variable = "SEDE", encabezado = "PUNTAJES POR SEDE", leyenda = Msj, colorHead = "#F9CA00", estilo = list( PaletaYear = c("#AEF133", "#19EE9F"), PaletaCategoria = c("#DD1C1A", "#FF6700", "#7E10DE","#0096F2", "#42C501") ) )
if (require("dplyr")) { VariosYears <- ejConsolidadoSaberPro2019 |> mutate(YEAR = replace(YEAR, YEAR==2019, 2020)) |> bind_rows(ejConsolidadoSaberPro2019) } Msj <- "\u00c9sta es una descripci\u00f3n de la tabla diferente al valor por default." Tabla.SaberPro( datos = VariosYears, variable = "SEXO", encabezado = "PUNTAJES POR SEXO", leyenda = Msj, colorHead = "#FF5B5B", estilo = list( PaletaYear = c("#F9CA00", "#F68118"), PaletaCategoria = c("#2458C5", "#F0006D", "#42C501") ) ) Tabla.SaberPro( datos = VariosYears, variable = "SEDE", encabezado = "PUNTAJES POR SEDE", leyenda = Msj, colorHead = "#F9CA00", estilo = list( PaletaYear = c("#AEF133", "#19EE9F"), PaletaCategoria = c("#DD1C1A", "#FF6700", "#7E10DE","#0096F2", "#42C501") ) )