Grafici a ragnatela e paralleli in R con il pacchetto ggvanced.

Spider and parallel plots in R using the ggvanced package.

Un pacchetto R per la visualizzazione efficace di multiple variabili

Un bel grafico a ragnatela. Immagine dell'autore.

Motivazione

Durante uno dei miei progetti di analisi dati, mi sono trovato nella necessità di confrontare gruppi su più variabili contemporaneamente in modo efficace. Naturalmente, i grafici a barre mi sono venuti in mente per primi, ma volevo qualcosa di più accattivante, di più interessante. Dopo aver navigato un po’ in rete, ho scelto due candidati principali – un grafico a ragnatela e un grafico parallelo.

Dopo questo, di solito trovo semplicemente un pacchetto R dedicato che produca le visualizzazioni necessarie, ma questa volta, questo approccio mi ha lasciato a mani vuote.

UNA BUGIA – potrebbero dire gli utenti R più esperti! Tali visualizzazioni possono già essere ottenute utilizzando pacchetti come fsmb e ggradar per i grafici a radar e ggally per i grafici paralleli.

Tuttavia, oltre a eseguire semplicemente il confronto graduato di gruppi su variabili, volevo anche visualizzare contemporaneamente l’intervallo di valori per ogni variabile. E, indovina un po’, nessuno dei pacchetti sopra citati offriva questa opzione. Quindi, ho deciso di crearne uno mio 🙂

Il pacchetto ggvanced

ggvanced è un pacchetto R per la creazione di grafici multivariati avanzati come grafici a ragnatela e grafici paralleli. Le visualizzazioni sono create in cima al pacchetto ggplot2. La bellezza del pacchetto ggplot2 è la grammatica sottostante dei grafici, che consente la creazione di grafici impilando più strati l’uno sull’altro. Questo potente concetto ci consente di creare essenzialmente qualsiasi visualizzazione, purché sappiamo come codificarla.

Creazione di visualizzazioni utilizzando l'approccio della grammatica dei grafici. Immagine dell'autore.

Il pacchetto è attualmente disponibile su GitHub e può essere installato digitando il comando devtools::install_github("Ringomed/ggvanced") in R e chiamando library(ggvanced) dopo.

Se sei interessato ai dettagli della costruzione del grafico, in un recente post ho mostrato la logica alla base della costruzione di un grafico a ragnatela da zero, quindi dai un’occhiata alla storia qui sotto o alla documentazione dettagliata su GitHub.

Come Creare un Grafico a Ragnatela in R Utilizzando ggplot2

Una costruzione passo-passo di un grafico a ragnatela

towardsdatascience.com

Per il resto di voi, di seguito ci sono alcuni esempi che mostrano cosa possono fare le funzioni del pacchetto.

Grafici a ragnatela con ggspider()

La funzione ggspider() crea grafici a ragnatela con un asse condiviso singolo scalato su un intervallo [0,1], o un asse separato con valori reali visualizzati per ogni categoria visualizzata. Testiamo la funzione su un paio di esempi. Prima di tutto, dobbiamo formattare i dati in modo che la prima colonna contenga l’identificatore del gruppo e le altre colonne le variabili descrittive. Useremo i set di dati incorporati 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)

Confronto delle caratteristiche delle auto

ggspider(mtcars_summary)
Immagine dell'autore.

Le differenze chiave tra le auto risaltano immediatamente. Come previsto, rispetto alle auto da corsa come la Ferrari e la Maserati, la Volvo ha molta meno potenza (hp) e impiega molto più tempo per coprire un quarto di miglio (qsec), ma è anche molto più economica in termini di miglia per gallone (mpg).

Visualizzazione delle differenze tra le specie di Iris

ggspider(iris_summary)
Immagine dell'autore.

Come nell’esempio delle auto, il grafico a ragnatela è molto efficace per determinare le differenze tra le specie di Iris. Possiamo subito vedere che le specie Versicolor e Virginica sono molto più simili, avendo essenzialmente gli stessi rapporti tra le lunghezze e le larghezze dei petali e dei sepali e differendo solo per la dimensione totale del fiore. Al contrario, la specie Setosa ha una larghezza di sepalo molto più grande.

Grafici a radar

La funzione consente anche la creazione di grafici a radar tradizionali con un unico asse di scala comune specificando l’argomento scaled = TRUE e passando a una forma rotonda utilizzando polygon = FALSE.

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

Gli altri argomenti della funzione sono più estetici e coprono aspetti come la dimensione del carattere, la posizione delle etichette e così via. Per ulteriori dettagli, fare riferimento alla documentazione della funzione.

Grafici paralleli con ggparallel()

Anche se preferisco i grafici a ragnatela dal punto di vista estetico, i grafici paralleli possono rendere più facile individuare le tendenze tra le variabili. Questo è particolarmente vero quando ci sono molte variabili o osservazioni nel dataset.

ggparallel(mtcars_summary)
Immagine dell'autore.
ggparallel(iris_summary)
Immagine dell'autore.

Giocando con l’estetica

I grafici sopra sono solo versioni essenziali. Naturalmente, possono essere “abbelliti” come qualsiasi altro grafico di ggplot2. Di seguito è riportato un esempio di un grafico a ragnatela ggvanced dopo un paio di modifiche.

Immagine dell'autore.

E naturalmente, il codice di accompagnamento. Buon divertimento! 🙂

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("Miglia per Gallone" = mpg, "Cilindri" = cyl,         "Cilindrata" = disp, "Cavalli" = hp,         "Rapporto asse\n posteriore" = drat, "Peso" = wt) %>%  dplyr::select(1:7)ggspider(mtcars_gr, axis_name_offset = 0.15, background_color = "beige", fill_opacity = 0.15) +  labs(col = "Nome dell'auto", title = "Confronto delle proprietà dell'auto") +  theme(plot.title = element_text(hjust = 0.475, face = "bold"),        legend.title = element_text(face = "bold"),        text = element_text(family = "Roboto Condensed", face = "bold"))

Conclusione

In questo post, ho coperto le funzioni e le opzioni chiave di ggvanced – un pacchetto che ho creato in risposta alla necessità di grafici a ragno e paralleli più avanzati in R.

Il testo illustra alcuni esempi per ogni funzione e mostra poi come il risultato finale può apparire dopo alcune personalizzazioni aggiuntive.

Spero che il pacchetto ti sia utile come lo è per me. Se hai richieste per ulteriori visualizzazioni personalizzate da implementare in R, per favore lascia un commento e farò del mio meglio per creare una funzione separata per essa. 🙂