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
)

Argumentos

datos

Un data frame, no un vector numérico.

variable

Una variable numérica dentro del data frame ingresado en datos.

grupo1

Una variable categórica dentro del data frame ingresado en datos.

grupo2

Otra variable categórica dentro del data frame ingresado en datos por si se desea segregar por otra clase el grupo principal.

vertical

Si es TRUE (valor predeterminado) indicará que la orientación del gráfico será vertical.

outliers

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.

jitter

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.

violin

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".

numericalVars

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.

ylim

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.

colores

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.

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 X. Por defecto se emplea el rótulo "Periodo".

labelY

Cadena de caracteres indicando la etiqueta del eje Y.

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 grupo1, para el caso en que se tenga dos grupos no tendrá ningún efecto en el plot.

libreria

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.

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.

  • 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()).

estatico

Si es FALSE (valor predeterminado) el gráfico a retornar será dinámico (dependiendo de la librería seleccionada), en caso contrario se retornará un gráfico estático construido con ggplot2.

Valor

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".

Detalles

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.

Lista de argumentos de estilo

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íaestilo$Plot.Series()Plot.Barras()Plot.Apiladas()Plot.Boxplot()Plot.Radar()Plot.Treemap()Plot.Torta()Plot.Drilldown()
gg.Tema××××
lgg.Texto××××
lgg.Legend×××
lgg.Linea×
lgg.Punto×
lgg.Bar××
lgg.VarWidth×
lgg.OutShape×
lgg.JitWidth×
lgg.JitSize×
lgg.Range×
ggplot2gg.plty×
lgg.plwd×
lgg.cglwd×
lgg.cglcol×
lgg.fontsize.title×
lgg.fontsize.labels×
lgg.fontcolor.labels×
lgg.border.lwds×
lgg.border.col×
lgg.lowerbound.cex.labels×
lgg.force.print.labels×
gg.overlap.labels×
»hc.Tema×××××××
lhc.Credits×××××××
highcharterhc.BoxInfo×
lhc.Slider×
»hc.borderRadius×
ply.Credits×××××××
°ply.Legend××
°ply.LegendPosition××××
plotlyply.Interaction××
°ply.Relleno×
°ply.Opacidad××
ply.LegendTitle×
dygraphsdyg.LegendWidth×
»dyg.Resaltar×
e.Tema×
le.Credits×
echarts4re.Forma×
le.LegType×
e.LegLoc×

Examples

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" ) ) )