R Box Plot
In questo articolo, imparerete a creare whisker e box plot nella programmazione R. Imparerai anche a disegnare box plot multipli in un singolo plot.
In R, il boxplot (e il whisker plot) viene creato usando la funzione boxplot()
.
La funzione boxplot()
accetta un qualsiasi numero di vettori numerici, disegnando un boxplot per ogni vettore.
Puoi anche passare una lista (o data frame) con vettori numerici come suoi componenti. Usiamo il dataset incorporato airquality
che ha “Misurazioni giornaliere della qualità dell’aria a New York, da maggio a settembre 1973.”- Documentazione R.
> str(airquality)'data.frame':153 obs. of 6 variables:$ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...$ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...$ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...$ Temp : int 67 72 74 62 56 66 65 59 61 69 ...$ Month : int 5 5 5 5 5 5 5 5 5 5 ...$ Day : int 1 2 3 4 5 6 7 8 9 10 ...
Facciamo un boxplot per le letture dell’ozono.
boxplot(airquality$Ozone)
Si può vedere che i dati sopra la mediana sono più dispersi. Possiamo anche notare due outlier all’estremo superiore.
Possiamo passare parametri aggiuntivi per controllare l’aspetto del nostro grafico. Si può leggere nella sezione di aiuto ?boxplot
.
Alcuni di quelli usati frequentemente sono, main
per dare il titolo, xlab
e ylab
per fornire etichette per gli assi, col
per definire il colore ecc.
Inoltre, con l’argomento horizontal = TRUE
possiamo tracciare orizzontalmente e con notch = TRUE
possiamo aggiungere una tacca al box.
boxplot(airquality$Ozone,main = "Mean ozone in parts per billion at Roosevelt Island",xlab = "Parts Per Billion",ylab = "Ozone",col = "orange",border = "brown",horizontal = TRUE,notch = TRUE)
Return Value of boxplot()
La funzione boxplot()
restituisce una lista con 6 componenti mostrata come segue.
> b <- boxplot(airquality$Ozone)> b$stats 1.0 18.0 31.5 63.5 122.0attr(,"class")1 "integer" $n 116$conf 24.82518 38.17482$out 135 168$group 1 1$names "1"
Come possiamo vedere sopra, viene restituita una lista che ha stats
– la posizione degli estremi superiori/inferiore dei baffi e del box insieme alla mediana,
-
n
-il numero di osservazioni con cui viene disegnato il boxplot (notare che iNA
non vengono presi in considerazione) -
conf
– estremi superiori/inferiore della tacca,out
-valore degli outlier -
group
-un vettore della stessa lunghezza di out i cui elementi indicano a quale gruppo appartiene l’outlier e -
names
-un vettore di nomi per i gruppi.
Boxplot multipli
Possiamo disegnare boxplot multipli in un unico grafico, passando una lista, un data frame o vettori multipli.
Consideriamo il campo Ozone
e Temp
del dataset airquality
. Generiamo anche una distribuzione normale con la stessa media e deviazione standard e li tracciamo fianco a fianco per un confronto.
# prepare the dataozone <- airquality$Ozonetemp <- airquality$Temp# gererate normal distribution with same mean and sdozone_norm <- rnorm(200,mean=mean(ozone, na.rm=TRUE), sd=sd(ozone, na.rm=TRUE))temp_norm <- rnorm(200,mean=mean(temp, na.rm=TRUE), sd=sd(temp, na.rm=TRUE))
Ora facciamo 4 boxplot con questi dati. Usiamo gli argomenti at
e names
per indicare il luogo e l’etichetta.
boxplot(ozone, ozone_norm, temp, temp_norm,main = "Multiple boxplots for comparision",at = c(1,2,4,5),names = c("ozone", "normal", "temp", "normal"),las = 2,col = c("orange","red"),border = "brown",horizontal = TRUE,notch = TRUE)
FormulaBoxplot
La funzione boxplot()
può anche accettare formule della forma y~x
dove, y
è un vettore numerico che viene raggruppato secondo il valore di x
.
Per esempio, nel nostro set di dati airquality
, il Temp
può essere il nostro vettore numerico. Il mese può essere la nostra variabile di raggruppamento, in modo da ottenere il boxplot per ogni mese separatamente. Nel nostro set di dati, il mese è sotto forma di numero (1=gennaio, 2-gennaio e così via).
boxplot(Temp~Month,data=airquality,main="Different boxplots for each month",xlab="Month Number",ylab="Degree Fahrenheit",col="orange",border="brown")
Dalla figura sopra è chiaro che il mese numero 7 (luglio) è relativamente più caldo del resto.