Plot.Boxplot.Rd
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
)
Un data frame, no un vector numérico.
Una variable numérica dentro del data frame ingresado en datos
.
Una variable categórica dentro del data frame ingresado en datos
.
Otra variable categórica dentro del data frame ingresado en datos
por si se desea segregar por otra clase el grupo principal.
Si es TRUE
(valor predeterminado) indicará que la orientación
del gráfico será vertical.
Si es TRUE
(valor predeterminado) se mostrarán los puntos
correspondientes a los datos atípicos, defínalo en FALSE
si desea ocultar
dichos puntos.
Si es TRUE
se agregará las observaciones de cada grupo con un
poco de ruido aleatorio encima de las cajas, útil para mostrar la distribución
subyacente de los datos. El valor por defecto es FALSE
.
Si es TRUE
se acompañará el boxplot con su diagrama de densidad,
logrando ser más informativo al mostrar la distribución completa de los datos.
Solo aplica para la librería "plotly"
.
Una lista (ya sea creada con la sintaxis base
o tidy
)
con las variables numéricas dentro del data frame ingresado en datos
con
las que se desea crear un botón dinámico para desplazarse entre ellas fijando
el grupo ingresado en grupo1
.
Vector numérico que especifica el límite inferior y superior,
respectivamente, del eje Y
. Si no se introduce algún valor se mostrará todo
el rango disponible para dicho eje.
Cadena de caracteres indicando los colores con los cuales se
deben colorear cada una de las trazas correspondiente a cada nivel del argumento
grupo1
. Si no se introduce algún vector se usará la paleta rainbow
por defecto.
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á.
Cadena de caracteres indicando el color de los puntos considerados como atípicos, por defecto se pintarán de un azul rey.
Cadena de caracteres indicando el título principal del plot.
Cadena de caracteres indicando la etiqueta del eje X
. Por
defecto se emplea el rótulo "Periodo".
Cadena de caracteres indicando la etiqueta del eje Y
.
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 grupo1
, para el caso en que se tenga dos grupos no tendrá
ningún efecto en el plot.
Cadena de caracteres que indica el paquete con el cual se realizará
el plot. Los valores permitidos son "highcharter"
(valor predeterminado)
y "plotly"
. Los valores se emparejarán parcialmente.
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.
LegendTitle
, hc.Tema
y hc.Credits
: Igual uso que en Plot.Series()
ply.Interaction
, ply.LegendPosition
y ply.Credits
: Igual uso que en
Plot.Series()
gg.Tema
, gg.Legend
y gg.Texto
: Igual uso que en Plot.Series()
gg.VarWidth
: Si es FALSE
(valor predeterminado) se realizará
un diagrama de caja estándar. Si es TRUE
, las cajas se dibujan con anchos
proporcionales a las raíces cuadradas del número de observaciones en los
grupos. Para más información, consulte la función geom_boxplot()).
gg.OutShape
: Modifica la forma de los outliers (datos atípicos).
Los posibles valores son un número entero entre \([1, 23]\). Para más
información consulte la función geom_boxplot()).
gg.JitWidth
: Valor numérico que indica el tamaño del ancho en el que los
puntos pueden dispersarse en cada una de las cajas El valor por defecto es
0.25
. Para más información, consulte la función geom_jitter()).
gg.JitSize
: Valor numérico que indica el tamaño de los jittered points.
El valor por defecto es 0.4
. Para más información, consulte la función
geom_jitter()).
Si es FALSE
(valor predeterminado) el gráfico a retornar
será dinámico (dependiendo de la librería seleccionada), en caso contrario
se retornará un gráfico estático construido con ggplot2
.
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".
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.
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)
)
#>
#> ── PRECAUCIÓN ──────────────────────────────────────────────────────────────────
#> ℹ Alerta: Inconsistencias encontradas en el dataframe ingresado.
#> → Su df no contiene información para todas las posibles combinaciones entre:
#> "Serie" and "TIPO_INS".
#> ★ Para que todo funcione correctamente con el paquete highcharter es necesario
#> agregar:
#> ✔ Se tuvo que agregar 25 filas.
#> cli-10120-350
# ---------------------------------------------------------------------------
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
)
)
#> Warning: Removed 2514 rows containing missing values or values outside the scale range
#> (`geom_point()`).
# ---------------------------------------------------------------------------
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"
)
)
)