R Box Plot
W tym artykule nauczysz się tworzyć wykresy w kształcie wąsika i pudełka w programie R. Nauczysz się również rysować wiele wykresów pudełkowych w pojedynczym wykresie. Nauczysz się również rysować wiele wykresów pudełkowych w jednym wykresie.
W R, boxplot (i wykres wachlarzowy) jest tworzony przy użyciu funkcji boxplot()
.
Funkcja boxplot()
przyjmuje dowolną liczbę wektorów numerycznych, rysując boxplot dla każdego wektora.
Możesz również przekazać listę (lub ramkę danych) z wektorami numerycznymi jako jej składnikami. Użyjmy wbudowanego zbioru danych airquality
, który ma „Codzienne pomiary jakości powietrza w Nowym Jorku, od maja do września 1973 r.”- dokumentacja 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 ...
Zróbmy wykres pudełkowy dla odczytów ozonu.
boxplot(airquality$Ozone)
Widzimy, że dane powyżej mediany są bardziej rozproszone. Możemy również zauważyć dwie wartości skrajne na wyższym biegunie.
Możemy przekazać dodatkowe parametry, aby kontrolować wygląd naszego wykresu. Możesz o nich przeczytać w sekcji pomocy ?boxplot
.
Niektóre z często używanych to, main
-do nadania tytułu, xlab
i ylab
-do nadania etykiet dla osi, col
do określenia koloru itd.
Dodatkowo, za pomocą argumentu horizontal = TRUE
możemy wykreślić go poziomo, a za pomocą notch = TRUE
dodać wcięcie do pudełka.
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()
Funkcja boxplot()
zwraca listę z 6 elementami przedstawionymi w następujący sposób.
> 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"
Jak widzimy powyżej, zwracana jest lista, która posiada stats
-położenie górnych/dolnych ekstremów wcięcia i pudełka wraz z medianą,
-
n
-liczbę obserwacji, z którymi boxplot jest rysowany (zauważ, żeNA
nie są brane pod uwagę) -
conf
-górne/dolne ekstrema wcięcia,out
-wartość wartości odstających -
group
-wektor tej samej długości co out, którego elementy wskazują do jakiej grupy należy odstający oraz -
names
-wektor nazw grup.
Wielokrotne boxploty
Możemy narysować wiele boxplotów w jednym wykresie, przekazując listę, ramkę danych lub wiele wektorów.
Rozważmy pola Ozone
i Temp
zbioru danych airquality
. Wygenerujmy również rozkład normalny z taką samą średnią i odchyleniem standardowym i wykreślmy je obok siebie dla porównania.
# 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))
Teraz wykonamy 4 wykresy pudełkowe z tymi danymi. Używamy argumentów at
i names
do oznaczenia miejsca i etykiety.
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)
Formuła boxplot
Funkcja boxplot()
może również przyjmować formuły postaci y~x
gdzie, y
jest wektorem liczbowym, który jest grupowany według wartości x
.
Na przykład, w naszym zbiorze danych airquality
, Temp
może być naszym wektorem liczbowym. Miesiąc może być naszą zmienną grupującą, tak abyśmy otrzymali boxplot dla każdego miesiąca osobno. W naszym zbiorze danych miesiąc ma postać liczby (1=styczeń, 2-luty i tak dalej).
boxplot(Temp~Month,data=airquality,main="Different boxplots for each month",xlab="Month Number",ylab="Degree Fahrenheit",col="orange",border="brown")
Z powyższego rysunku jasno wynika, że miesiąc numer 7 (lipiec) jest relatywnie cieplejszy od pozostałych.
.