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
)

Argumentos

datos

Un data frame, se espera en formato de microdatos no un agregado.

categoria

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

variables

Lista (ya sea creada con la sintaxis base o tidy) con las variables numéricas (mínimo tres para que se pueda realizar el gráfico) dentro del data frame ingresado en datos.

estadistico

Cadena de caracteres que indica el estadístico a graficar. Los valores permitidos son "Promedio" (valor predeterminado), "Mediana", "Varianza", "SD", "CV", "Min" y "Max".

colores

Cadena de caracteres indicando los colores con los cuales se deben colorear cada una de las trazas correspondiente a cada nivel del argumento categoria. Si no se introduce algún vector se usará la paleta rainbow por defecto.

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á c(0, NaN) como rango.

ordinal

Si es TRUE indicará que las categorías de la variable ingresada son ordinales (no nominales), esto con el fin de ordenar la disposición en el que se presentan en el eje del gráfico, el valor por defecto es FALSE.

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 "plotly" (valor predeterminado) o "echarts". 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 radar y cuyo objetivo es personalizar pequeños detalles de éste.

  • ply.LegendTitle, ply.LegendPosition y ply.Credits: Igual uso que en Plot.Series()

  • ply.Relleno: Cadena de caracteres indicando cómo se debe rellenar el área, toself (valor predeterminado) conecta los puntos de la traza de forma cerrada y superpone las áreas, mientras que tonext deja visible la capa más profunda y si se comparten áreas no las superpone; finalmente especifique none si desea ver únicamente los polígonos y que no se rellene el área dentro de ellos.

  • ply.Opacidad: Un número entre \([0, 1]\) que indica la opacidad de los polígonos/trazos.

  • e.Credits: Cadena de caracteres indicando el subtítulo del gráfico principal. Para mayor información, consulte la función e_title().

  • e.Forma: Cadena de caracteres indicando el tipo de renderizado del radar, los valores admitidos son polygon (valor predeterminado) y circle. Para mayor información, consulte la función e_radar_opts().

  • e.Tema: Modifica el tema con el cual se creará el gráfico. Los posibles valores son un número entero entre \([1, 14]\) el cual hace referencia a diferentes temas disponibles en dicha librería (helianthus, azul, inspired, macarons, westeros, walden, roma, royal, fruit, dark, chalk, purple-passion, vintage y essos respectivamente). El tema por defecto se logra al no ingresar valor alguno. Para más información consulte aquí.

  • e.LegType: Cadena de caracteres indicando el tipo de leyenda, los valores admitidos son plain (valor predeterminado) y scroll (útil cuando es necesario mostrar demasiados elementos). Para mayor información consulte la función e_legend().

  • e.LegLoc: Valor numérico o cadena de caracteres indicando la distancia entre la leyenda y el lado derecho del contenedor, puede ser expresado como un valor puntual o un valor porcentual relativo al ancho del contenedor.

  • gg.Range: Valor booleano opcional, si se especifica en TRUE el rango a tomar será simétrico, en el sentido en que se tomará el mínimo y máximo global de todas las variables, uno mismo para cada una de ellas. Diferente a si se omite el parámetro rango, pues acá el mínimo y máximo varía para cada variable.

  • gg.plty: Tipo de línea para los datos del gráfico. Para más detalles consulte la función radarchart().

  • gg.plwd: Ancho de la línea para los datos del gráfico. Para más detalles consulte la función radarchart().

  • gg.cglwd: Ancho de la línea para las grillas del radar. Para más detalles consulte la función radarchart().

  • gg.cglcol: Color de la línea para las grillas del radar. Para más detalles consulte la función radarchart().

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

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

# 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")
)
#> Warning: ¡Se usará como estadístico la media muestral ('mean') por defecto!
#> Warning: ¡Se usará la librería 'plotly' por defecto para realizar el plot!
#> Joining with `by = join_by(TIPO_COL)`
# --------------------------------------------------------------------------- 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) ) #> Warning: ¡Se usará como estadístico la media muestral ('mean') por defecto! #> Warning: ¡Se usará la librería 'plotly' por defecto para realizar el plot! #> Joining with `by = join_by(SEDE_NOMBRE_ADM)`
# --------------------------------------------------------------------------- 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" ) #> Warning: ¡Se usará como estadístico la media muestral ('mean') por defecto! #> Joining with `by = join_by(SEDE_NOMBRE_ADM)`
# --------------------------------------------------------------------------- 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) ) ) #> Joining with `by = join_by(SEDE_NOMBRE_ADM)`
# --------------------------------------------------------------------------- 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 ) ) #> Joining with `by = join_by(SEDE_NOMBRE_ADM)`
# --------------------------------------------------------------------------- # 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" ) ) #> Joining with `by = join_by(TIPO_COL)`