Dopo
la prima parte dedicata ai grafici a barre (bar plot o barplot) [1] continuiamo
ora estendendo la rappresentazione a un numero maggiore di dati con l'esempio tratto da
Marubini [2] relativo al grado di protezione rilevato per cinque differenti
vaccini contro l'influenza. Questi sono i dati espressi in
percentuale:
Esito
|
Vaccino_1
|
Vaccino_2
|
Vaccino_3
|
Vaccino_4
|
Vaccino_5
|
Influenza_si
|
18.1
|
21.0
|
9.1
|
18.3
|
20.0
|
Influenza_no
|
81.9
|
79.0
|
90.8
|
81.7
|
80.0
|
Questo
script permette di generare un classico grafico a barre affiancate.
Copiatelo e incollatelo nella
Console di R e premete ↵
Invio:
#
GRAFICO A BARRE PER L'EFFICACIA DI 5 VACCINI
#
cells
<- c(18.1,21,9.1,18.3,20,81.9,79,90.9,81.7,80) # genera
l'array cells con i valori di percentuale
rnames
<- c("Influenza_si", "Influenza_no")
# genera l'array rnames con i nomi delle righe
cnames
<- c("Vaccino_1", "Vaccino_2", "Vaccino_3",
"Vaccino_4", "Vaccino_5") # genera
l'array cnames con i nomi delle colonne
mydata
<- matrix(cells, nrow=2, ncol=5, byrow=TRUE, dimnames=list(rnames,
cnames)) # genera la matrice dati
#
mydata
# mostra la matrice dati
t(mydata)
# mostra la matrice dati trasposta
#
windows()
# apre una nuova finestra
barplot(t(mydata),
beside=TRUE, legend=TRUE, ylim=c(0,150), col=c("red","orange",
"yellow", "green", "skyblue"),
ylab="Frequenze osservate", xlab="Esiti delle
vaccinazioni", main="Valutazione dell’efficacia di 5
vaccini influenzali")
# traccia il grafico a barre verticali
#
Lo
script segue lo schema già visto, nelle prime tre righe sono
generati con la funzione c():
→
il
vettore che contiene i dieci dati (che come si vede devono essere
inseriti in sequenza leggendoli dalla tabella da sinistra a destra e dall'alto in
basso) che sono salvati nell'oggetto cells;
→
il
vettore che contiene i nomi delle righe, salvato nell'oggetto rnames;
→
il
vettore che contiene i nomi delle colonne, salvato nell'oggetto
cnames.
I
tre vettori sono combinati a formare la matrice dei dati mediante la
funzione matrix() che impiega gli
argomenti che indicano:
→
l'oggetto/vettore
contenente i dati (cells);
→
il
numero di righe (nrow)
e il numero di colonne (ncol)
della matrice;
→
la
modalità di riempimento della matrice, che deve essere riempita per
righe (byrow=TRUE)
quindi da sinistra a destra e dall'alto in basso;
→
i
nomi da assegnare alle righe e alle colonne (dimnames=list(rnames,
cnames)).
A
questo punto per fare il punto della situazione sono mostrate sia la
matrice dati mydata sia la sua
matrice trasposta t(mydata) [3]:
> mydata # mostra la matrice dati
Vaccino_1 Vaccino_2 Vaccino_3 Vaccino_4 Vaccino_5
Influenza_si 18.1 21 9.1 18.3 20
Influenza_no 81.9 79 90.9 81.7 80
> t(mydata) # mostra la matrice dati trasposta
Influenza_si Influenza_no
Vaccino_1 18.1 81.9
Vaccino_2 21.0 79.0
Vaccino_3 9.1 90.9
Vaccino_4 18.3 81.7
Vaccino_5 20.0 80.0
Viene
quindi aperta una nuova finestra con la funzione windows()
e viene generato un primo grafico a barre con la funzione barplot()
[4] impiegando questi argomenti:
→ per
i dati viene impiegata la matrice dati trasposta t(mydata);
→ l'argomento
beside=TRUE
specifica che le barre sono affiancate e non sovrapposte in pila;
→ con
l'argomento legend=TRUE
viene generata una legenda;
→ con
l'argomento ylim=c(0,150)
sono impostati il valore minimo e il valore massimo per l'asse delle
y;
→ con
l'argomento col
è impostato il colore delle barre.
Ora copiate e incollate nella Console di R queste due righe di codice e premete ↵ Invio:
#
windows()
# apre una nuova finestra
barplot(mydata,
beside=FALSE, legend=TRUE, ylim=c(0,150), col=c("red",
"green"), density = 40, angle = 45, ylab="Frequenze
osservate", xlab="Vaccino infuenzale",
main="Valutazione dell’efficacia di 5 vaccini influenzali")
# traccia il grafico a barre verticali
#
Con
lo script dopo avere aperto una nuova finestra grafica (windows())
viene realizzato un nuovo grafico a barre impiegando la funzione
barplot()
con queste variazioni rispetto al precedente:
→ per
i dati viene impiegata la matrice mydata;
→ l'argomento
beside=FALSE
specifica che le barre sono sovrapposte in pila;
→ con
l'argomento col=c("yellow",
"green")
viene fornito l'array contenente i colori da applicare;
→ con
gli argomenti density = 40, angle =
45 sono specificati la densità e
l'angolo delle linee colorate che andranno a riempire le barre.
Il
risultato è ora questo grafico con le barre sovrapposte in pila (attenzione al fatto che ogni nuova finestra grafica si sovrappone alla precedente, spostatela per visualizzarle entrambe):
Finora i grafici a barre sono stati generati specificando per ciascuna barra il numero dei casi. Ma se i dati sono numerosi è possibile impiegare la funzione table() che genera tabelle di contingenza che riportano i dati dei conteggi effettuati per noi da R [5].
Per
farlo è necessario il pacchetto DAAG [6]. Il pacchetto contiene tra gli altri il set di dati ais sul quale
effettuiamo il conteggio e la rappresentazione sotto forma di grafico
a barre prima del numero degli atleti per sport praticato e poi del
numero degli atleti per sesso e per sport praticato.
Ora
copiate e incollate nella Console
di R queste righe di
codice e premete ↵
Invio:
#
GRAFICI A BARRE DA UNA TABELLA DI CONTINGENZA
#
library(DAAG)
# carica il pacchetto e il set di dati ais
#
#
grafico a barre per sport praticato
#
tab
<- table(ais$sport) # tabula i dati per sport
windows()
# apre una nuova finestra
barplot(t(tab),
beside=TRUE, legend=TRUE,
cex.names = 0.8, las = 2, xlab=
"Sport praticato", ylab = "Numero degli atleti",
main = "Numero degli atleti per sport praticato", col =
"green") # grafico a barre
#
#
grafico a barre per sport praticato e per sesso
#
tab
<- table(ais$sport, ais$sex) # tabula i dati per sport
e per sesso
windows()
# apre una nuova finestra
barplot(t(tab),
beside=TRUE, legend=TRUE, cex.names
= 0.8, las = 2, xlab=
"Sport praticato", ylab = "Numero degli atleti",
main = "Numero degli atleti per sport praticato e per sesso",
col = c("green", "yellow")) # grafico
a barre
#
Questo
è il grafico a barre con il numero degli atleti per sport praticato
e
questo è il grafico a barre con il numero degli atleti per sport
praticato ulteriormente suddiviso per sesso dell'atleta
→
l'espressione
table(ais$sport)
impiegata per tabulare i dati in base alla variabile
sport (lo
sport praticato dall'atleta);
→
l'espressione
table(ais$sport,
ais$sex)
impiegata per tabulare i dati in base alla variabile
sport e
suddividerli ulteriormente in base alla variabile
sex (il
sesso dell'atleta);
→
l'argomento
cex.names = 0.8
che rimpicciolisce le etichette che riportano lo sport corrispondente a ciascuna della barre;
→
l'argomento
las = 2
che le ruota verticalmente.
----------
[1] Vedere il post Grafici a barre (barplot) [1].
[2] Vedere il post Test chi-quadrato n righe · n colonne.
[3]
Digitate help(t) nella
Console di R per la documentazione della funzione t().
[4]
Digitate help(barplot) nella
Console di R per la documentazione della funzione barplot().
[5]
Digitate help(table) nella
Console di R per la documentazione della funzione table().
[6] Vedere il post Il set di dati ais nel quale trovate anche come caricare i dati della tabella senza installare il pacchetto DAAG.
Grazie molto utile:) hai anche qualche script dove spieghi come graficare le barre di errore per ogni bar plot?
RispondiEliminaTi consiglio il pacchetto ggplot2, guarda qui...
RispondiEliminahttps://www.r-graph-gallery.com/4-barplot-with-error-bar.html