Gráficos de araña y paralelos en R con el paquete ggvanced.

Spider and parallel plots in R using the ggvanced package.

Un paquete de R para la visualización efectiva de múltiples variables

Una gráfica de araña bonita. Imagen del autor.

Motivación

En uno de mis proyectos de análisis de datos, me encontré en la necesidad de una forma efectiva de comparar grupos a través de varias variables al mismo tiempo. Por supuesto, primero pensé en los gráficos de barras, pero quería algo más llamativo, algo más interesante. Después de navegar por la web un poco, me decidí por dos candidatos principales: una gráfica de araña y una gráfica paralela.

Después de esto, normalmente solo encuentro un paquete de R dedicado que produce las visualizaciones necesarias, pero esta vez, este enfoque me dejó con las manos vacías.

¡Una MENTIRA! — ¡podrían decir los usuarios de R más experimentados! Tales visualizaciones ya se pueden obtener usando paquetes como fsmb y ggradar para gráficas de radar y ggally para parcelas paralelas.

Sin embargo, aparte de simplemente realizar la comparación clasificada de grupos a través de variables, también quería mostrar simultáneamente el rango de valores para cada variable. Y, lo adivinaste, ninguno de los paquetes mencionados ofrecía esto. Así que decidí construir el mío propio 🙂

El paquete ggvanced

ggvanced es un paquete de R para crear gráficos multivariables avanzados como gráficas de araña/radar y gráficas paralelas. Las visualizaciones se crean sobre el paquete ggplot2. La belleza del paquete ggplot2 es la gramática subyacente de gráficos, lo que permite la creación de gráficos apilando múltiples capas unas sobre otras. Este poderoso concepto nos permite crear esencialmente cualquier visualización, siempre y cuando sepamos cómo codificarlo.

Creando visualizaciones usando el enfoque de la gramática de gráficos. Imagen del autor.

El paquete está disponible actualmente en GitHub y se puede instalar escribiendo el comando devtools::install_github("Ringomed/ggvanced") en R y luego llamando a library(ggvanced).

Si está interesado en los detalles de la construcción de gráficos, en una publicación reciente mostré la lógica detrás de la construcción de una gráfica de araña desde cero, así que revisa la historia a continuación o la documentación detallada en GitHub.

Cómo hacer una gráfica de araña en R usando ggplot2

Una construcción paso a paso de una gráfica de araña/radar

towardsdatascience.com

Para el resto de ustedes, a continuación se muestran algunos ejemplos detallando lo que las funciones del paquete pueden hacer.

Gráficas de araña con ggspider()

La función ggspider() crea gráficas de araña que tienen un eje compartido único escalado a un rango de [0,1], o un eje separado con valores reales que se muestran para cada categoría mostrada. Probemos la función en un par de ejemplos. Primero, tenemos que formatear los datos para que la primera columna contenga el identificador del grupo y las demás columnas las variables descriptivas. Usaremos los conjuntos de datos incorporados mtcars e iris.

library(tidyverse)mtcars_summary <- mtcars %>%   tibble::rownames_to_column(var = "group") %>%    tibble::as_tibble() %>%   tail(3)iris_summary <- iris %>%   dplyr::group_by(Species) %>%   dplyr::summarise(across(everything(), mean))library(ggvanced)

Comparando las propiedades del coche

ggspider(mtcars_summary)
Imagen del autor.

Las diferencias clave entre los autos se destacan de inmediato. Como era de esperar, en comparación con los autos de carreras como Ferrari y Maserati, el Volvo tiene muchos menos caballos de fuerza (hp) y tarda mucho más en recorrer un cuarto de milla (qsec), pero también es mucho más económico en cuanto a millas por galón (mpg).

Visualización de diferencias entre las especies de Iris

ggspider(iris_summary)
Imagen del autor.

Al igual que con el ejemplo de los autos, el gráfico de araña es muy efectivo para determinar las diferencias entre las especies de iris. Podemos ver de inmediato que las especies Versicolor y Virginica son mucho más similares, teniendo esencialmente las mismas proporciones de longitud y ancho de pétalos y sépalos y diferenciándose solo en el tamaño total de la flor. Por el contrario, la especie Setosa tiene un ancho de sépalo mucho mayor.

Gráficos de radar

La función también permite la creación de gráficos de radar tradicionales con un solo eje escalado común especificando el argumento scaled = TRUE y cambiando a una forma redonda usando polygon = FALSE.

ggspider(iris_summary, scaled = TRUE, polygon = FALSE)

Los demás argumentos de la función son más estéticos en naturaleza y cubren aspectos como el tamaño de fuente, la posición de las etiquetas, etc. Para más detalles, consulte la documentación de la función.

Gráficos paralelos con ggparallel()

Aunque prefiero los gráficos de araña desde un punto de vista estético, los gráficos paralelos pueden hacer que sea más fácil detectar tendencias entre variables. Esto es especialmente cierto cuando hay muchas variables u observaciones en el conjunto de datos.

ggparallel(mtcars_summary)
Imagen del autor.
ggparallel(iris_summary)
Imagen del autor.

Jugando con la estética

Los gráficos anteriores son solo una versión básica. Por supuesto, pueden ser “mejorados” como cualquier otro gráfico de ggplot2. A continuación se muestra un ejemplo de un gráfico de araña ggvanced después de un par de alteraciones.

Imagen del autor.

Y por supuesto, el código que lo acompaña. ¡Disfruta! 🙂

library(tidyverse)library(ggvanced)library(sysfonts)library(showtext)sysfonts::font_add_google("Roboto Condensed")showtext_auto()mtcars_gr <- mtcars %>%  tibble::rownames_to_column(var = "group") %>%  tibble::as_tibble() %>%  tail(3) %>%  rename("Millas por galón" = mpg, "Cilindros" = cyl,         "Desplazamiento" = disp, "Caballos de fuerza" = hp,         "Relación de eje trasero" = drat, "Peso" = wt) %>%  dplyr::select(1:7)ggspider(mtcars_gr, axis_name_offset = 0.15, background_color = "beige", fill_opacity = 0.15) +  labs(col = "Nombre del auto", title = "Comparación de propiedades de autos") +  theme(plot.title = element_text(hjust = 0.475, face = "bold"),        legend.title = element_text(face = "bold"),        text = element_text(family = "Roboto Condensed", face = "bold"))

Conclusión

En este post, cubrí las funciones y opciones clave de ggvanced — un paquete que hice en respuesta a la necesidad de gráficos de araña y paralelos más avanzados en R.

El texto pasa por un par de ejemplos para cada función y luego muestra cómo puede verse el resultado final después de alguna personalización adicional.

Espero que el paquete te sea tan útil como lo es para mí. Si tienes solicitudes para que se implementen visualizaciones personalizadas adicionales en R, por favor, deja un comentario, y haré todo lo posible por crear una función separada para ello. 🙂