I
grafici
a violino (violin
plot)
prendono lo spunto dai grafici a scatola con i baffi (boxplot)
riportando per una distribuzione
univariata, al posto delle classiche scatole, il profilo di densità dei valori osservati
sotto forma di kernel density plot [1].
La
forma tipica dei grafici, che dà loro il nome, deriva dal
fatto che il kernel density plot dei dati è riportato
simmetricamente da entrambi i lati della distribuzione. Mentre
interessante, come vedremo tra poco, è che a un violin plot
possono essere sovrapposti al bisogno un grafico a scatola con i
baffi (boxplot) [2] oppure un grafico a punti (dotplot) [3], a
testimonianza del fatto che si tratta di viste dei dati diverse ma tra loro integrate e complementari.
Come dati impieghiamo la concentrazione degli eritrociti (globuli rossi) nel sangue rilevata in 202 atleti australiani riportata nella colonna/variabile rcc della tabella ais inclusa nel pacchetto DAAG. Accertatevi di avere installato il pacchetto o in alternativa procedete come indicato in [4]. Se non volete installare il pacchetto e avete scaricato il file di dati ais.csv sostituite nella prima riga dello script
library(DAAG)
con
ais <- read.table("c:/Rdati/ais.csv", header=TRUE, sep=";", dec=",")
Dovete scaricare dal CRAN anche il pacchetto ggplot2 che realizza la grafica [5].
Il tema è stato suddiviso in sei script, corrispondenti ad altrettanti modi di rappresentazione, tra i quali scegliere quello preferito. Copiate questo primo script, incollatelo nella Console di R e premete ↵ Invio.
# GRAFICI A VIOLINO (VIOLIN PLOT)
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto necessario per la grafica
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto necessario per la grafica
windows() # apre una nuova finestra
#
# violin plot riportati per intero
ggplot(ais, aes(x=sport, y=rcc, fill=sport)) + geom_violin(trim=FALSE)
#
#
# violin plot riportati per intero
ggplot(ais, aes(x=sport, y=rcc, fill=sport)) + geom_violin(trim=FALSE)
#
La
seconda riga di codice con library(ggplot2) carica il pacchetto che
contiene le funzioni necessarie per realizzare i grafici a
violino (violin plot).
Dopo (terza riga) avere aperto e inizializzato con la funzione
windows() una nuova finestra
grafica, arriviamo finalmente all'unica riga di codice necessaria per
realizzare il nostro primo grafico a violino mediante due funzioni concatenate:
→ la
funzione ggplot() che specifica come primo argomento i
dati da impiegare (ais) e come secondo argomento impiega la
funzione aes() per realizzare il grafico per la variabile
eritrociti (y=rcc) separatamente per ciascuno sport praticato (x=sport), riempiendo i
grafici con un colore differente per ciascuno sport (fill=sport);
→ la
funzione geom_violin che realizza
il grafico riportando per intero il kernel density plot
calcolato sui dati.
Questo
è quindi il primo grafico:
Minimizzate la finestra ma non chiudetela: vi sarà utile riaprirla per confrontare questo primo grafico con il secondo e con i successivi grafici.
Ora copiate e incollate nella
Console di R il secondo script e premete
↵ Invio.
# GRAFICI A VIOLINO (VIOLIN PLOT)
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto necessario per la grafica
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto necessario per la grafica
windows() # apre una nuova finestra
#
#
# violin plot troncati ai valori minimo e massimo osservati
ggplot(ais,
aes(x=sport, y=rcc, fill=sport)) + geom_violin(trim=TRUE)
#
#
Ponendo
nella funzione geom_violin()
l'argomento trim=TRUE il kernel
density plot/violin plot viene ora troncato in corrispondenza del
valore minimo e del valore massimo osservati, o se preferite viene
tracciato solamente all'interno del range/intervallo dei valori
osservati.
Questo corrisponde ad una regola aurea in quanto in
statistica (ma non solo in statistica) effettuare una estrapolazione, ovvero
andare oltre i dati, quindi andare al di la dell'informazione in
nostro possesso, significa addentrarsi in un terreno molto scivoloso.
Ed ecco il secondo grafico:
Ora copiate e incollate nella Console di R questo terzo script e premete ↵ Invio.
# GRAFICI A VIOLINO (VIOLIN PLOT)
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto necessario per la grafica
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto necessario per la grafica
windows() # apre una nuova finestra
#
#
# violin plot con sovrapposto grafico a scatola con i baffi
ggplot(ais, aes(x=sport, y=rcc, fill=sport)) + geom_violin(trim=TRUE) + geom_boxplot(width=0.1, fill="white")
#
ggplot(ais, aes(x=sport, y=rcc, fill=sport)) + geom_violin(trim=TRUE) + geom_boxplot(width=0.1, fill="white")
#
Qui
è stata aggiunta la funzione geom_boxplot()
che sovrappone al grafico a violino/violin plot un grafico a scatola
con i baffi (boxplot) specificando di rappresentare le scatole dei
grafici:
→ con width="0.1"
che definisce la larghezza delle scatole/box;
→ con fill="white"
che specifica il colore di riempimento delle scatole/box.
→ con width="0.1" che definisce la larghezza delle scatole/box;
→ con fill="white" che specifica il colore di riempimento delle scatole/box.
Da
notare che sono stati impiegati gli stessi dati utilizzati nell'esempio che illustra i grafici a scatola con i baffi [2] proprio per consentirvi di
effettuare un immediato confronto tra le due rappresentazioni grafiche.
Questo
è il terzo grafico realizzato:
# GRAFICI A VIOLINO (VIOLIN PLOT)
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto necessario per la grafica
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto necessario per la grafica
windows() # apre una nuova finestra
#
#
# violin plot senza legenda
ggplot(ais, aes(x=sport, y=rcc, fill=sport)) + geom_violin(trim=TRUE) + geom_boxplot(width=0.1, fill="white") + theme(legend.position="none")
#
ggplot(ais, aes(x=sport, y=rcc, fill=sport)) + geom_violin(trim=TRUE) + geom_boxplot(width=0.1, fill="white") + theme(legend.position="none")
#
Questa volta aggiungendo theme(legend.position="none")
abbiamo tolto, in quanto ridondante, la legenda generata automaticamente che
compariva sulla destra.
Questo
è conseguentemente il quarto grafico:
# GRAFICI A VIOLINO (VIOLIN PLOT)
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto necessario per la grafica
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto necessario per la grafica
windows() # apre una nuova finestra
#
#
# violin plot con titolo ed etichette degli assi
ggplot(ais, aes(x=sport, y=rcc, fill=sport)) + geom_violin(trim=TRUE) + geom_boxplot(width=0.1, fill="white") + theme(legend.position="none") + labs(title="Concentrazione degli eritrociti per sport praticato", x="Sport", y = "Concentrazione degli eritrociti (10^12/L)")
#
ggplot(ais, aes(x=sport, y=rcc, fill=sport)) + geom_violin(trim=TRUE) + geom_boxplot(width=0.1, fill="white") + theme(legend.position="none") + labs(title="Concentrazione degli eritrociti per sport praticato", x="Sport", y = "Concentrazione degli eritrociti (10^12/L)")
#
Ogni
grafico che si rispetti prevede un titolo e la descrizione della
variabili rappresentate, cosa che viene qui realizzata con la
funzione labs() nella quale sono
specificati titolo (title=...),
etichetta dell'asse delle x (x=...)
ed etichetta dell'asse delle y (y=...).
Questo
è il relativo e quinto grafico:
# GRAFICI A VIOLINO (VIOLIN PLOT)
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto necessario per la grafica
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto necessario per la grafica
windows() # apre una nuova finestra
#
#
# violin plot con sovrapposto il grafico a punti
ggplot(ais, aes(x=sport, y=hg, fill=sport)) + geom_violin(trim=TRUE) + geom_dotplot(method="dotdensity", binaxis='y', stackdir="center", stackratio=1, dotsize=0.7, binwidth=0.2, show.legend=FALSE) + coord_cartesian(ylim=c(10,20)) + theme(legend.position="none") + labs(title="Concentrazione dell'emoglobina nel sangue per sport praticato", x="Sport praticato", y="Emoglobina (g/dL)")
#
ggplot(ais, aes(x=sport, y=hg, fill=sport)) + geom_violin(trim=TRUE) + geom_dotplot(method="dotdensity", binaxis='y', stackdir="center", stackratio=1, dotsize=0.7, binwidth=0.2, show.legend=FALSE) + coord_cartesian(ylim=c(10,20)) + theme(legend.position="none") + labs(title="Concentrazione dell'emoglobina nel sangue per sport praticato", x="Sport praticato", y="Emoglobina (g/dL)")
#
Qui è stata aggiunta la funzione geom_dotplot() che sovrappone al grafico a violino/violin plot un grafico a punti (dotplot). Inoltre i dati sono cambiati: abbiamo riportato, per ciascuno sport praticato, la
concentrazione dell'emoglobina, la stessa impiegata per realizzare i
grafici a punti [3], per consentirvi di
effettuare un immediato confronto tra le due rappresentazioni grafiche.
Infine è stata aggiunta la funzione coord_cartesian() mediante la quale sono fissati con l'argomento ylim=... il limite inferiore (10) e il limite superiore (20) entro i quali rappresentare i valori.
E
questo è quindi il sesto e ultimo grafico:
Potete facilmente adattare il codice per ottenere la rappresentazione che più vi interessa, aiutandovi con la documentazione del pacchetto [5]:→ sostituendo la prima riga con il codice necessario per importare i vostri dati;→ nella funzione ggplot() sostituendo ais con il nome dell'oggetto che contiene i vostri dati;→ riportando in x=... il nome del fattore cioè della variabile qualitativa con la quale aggregare i dati in sottoinsiemi e in y=... il nome della vostra variabile numerica;→ adattando opportunamente nella funzione labs() il titolo, il nome del fattore e il nome della variabile.
→ sostituendo la prima riga con il codice necessario per importare i vostri dati;
→ nella funzione ggplot() sostituendo ais con il nome dell'oggetto che contiene i vostri dati;
→ adattando opportunamente nella funzione labs() il titolo, il nome del fattore e il nome della variabile.
Per
una guida rapida all'importazione in R dei vostri dati potete consultare i link:
→ importazione dei dati da un file .xls o .xlsx
→ importazione dei dati da un file .csv
→ importazione dei dati da un file .xls o .xlsx
→ importazione dei dati da un file .csv
Infine
si rammenta che nel post Salvare i grafici di R in un file è
riportato uno script che consente di trasformare i grafici in
immagini e salvarli sotto forma di file .bmp, .jpeg, .png, .pdf, .ps
per poterli stampare, archiviare,
inserire in una pubblicazione, in un post o in un sito web.
-----------
[1] Per i dettagli vedere il post Kernel density plot.
[2] Vedere il post Grafici a scatola con i baffi (boxplot).
[3] Vedere il post Grafici a punti (dotplot).
[4] Potete scaricare questo e gli altri file di dati seguendo le indicazioni che trovate alla pagina Dati.
[5]
Il manuale di riferimento Package ‘ggplot2’ lo potete scaricare facendo
click sul link accanto alla voce Reference manual nella pagina di documentazione del
pacchetto. URL consultato il 7/02/2021: https://bit.ly/3ioEJfE
Nessun commento:
Posta un commento