R Box Plot
In dit artikel leert u whisker- en boxplots te maken in R programmering. U leert ook om meerdere boxplots in één plot te tekenen.
In R wordt een boxplot (en whisker plot) gemaakt met behulp van de functie boxplot()
.
De functie boxplot()
neemt een willekeurig aantal numerieke vectoren op en tekent voor elke vector een boxplot.
U kunt ook een lijst (of dataframe) met numerieke vectoren als componenten opgeven. Laten we de ingebouwde dataset airquality
gebruiken met “Daily air quality measurements in New York, May to September 1973.”-R documentation.
> 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 ...
Laten we een boxplot maken voor de ozonmetingen.
boxplot(airquality$Ozone)
We kunnen zien dat de gegevens boven de mediaan meer verspreid zijn. We zien ook twee uitschieters aan het hoogste uiterste.
We kunnen extra parameters invoeren om te bepalen hoe onze plot eruitziet. U kunt hierover lezen in de help-sectie ?boxplot
.
Enkele van de vaak gebruikte zijn, main
om de titel te geven, xlab
en ylab
om labels voor de assen te geven, col
om kleur te definiëren enz.
Extra, met het argument horizontal = TRUE
kunnen we het horizontaal plotten en met notch = TRUE
kunnen we een inkeping toevoegen aan de 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 Waarde van boxplot()
De boxplot()
functie retourneert een lijst met 6 componenten die als volgt wordt weergegeven.
> 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"
Zoals we hierboven kunnen zien, wordt een lijst geretourneerd met stats
-de positie van de bovenste/onderste extremen van de whiskers en box samen met de mediaan,
-
n
het aantal observaties waarmee de boxplot is getekend (merk op datNA
’s niet worden meegerekend) -
conf
-bovenste/onderste extremen van de inkeping,out
-waarde van de uitbijters -
group
-een vector van dezelfde lengte als uit waarvan de elementen aangeven tot welke groep de uitbijter behoort en -
names
-een vector van namen voor de groepen.
Meervoudige boxplots
We kunnen meerdere boxplots tekenen in een enkele plot, door een lijst, dataframe of meerdere vectoren door te geven.
Laten we het Ozone
en Temp
veld van airquality
dataset beschouwen. Laten we ook een normale verdeling genereren met hetzelfde gemiddelde en standaardafwijking en deze naast elkaar plotten ter vergelijking.
# 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))
Nu maken we 4 boxplots met deze gegevens. We gebruiken de argumenten at
en names
om de plaats en het label aan te geven.
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)
Boxplot-vorm Formule
De functie boxplot()
kan ook formules aannemen van de vorm y~x
waarbij, y
een numerieke vector is die gegroepeerd is volgens de waarde van x
.
In onze dataset airquality
bijvoorbeeld, kan Temp
onze numerieke vector zijn. Maand kan onze groeperingsvariabele zijn, zodat we de boxplot voor elke maand afzonderlijk krijgen. In onze dataset heeft de maand de vorm van een getal (1=januari, 2-febuari enzovoort).
boxplot(Temp~Month,data=airquality,main="Different boxplots for each month",xlab="Month Number",ylab="Degree Fahrenheit",col="orange",border="brown")
Uit bovenstaande figuur blijkt duidelijk dat maand nummer 7 (juli) relatief heter is dan de rest.