boxplot() u R: Kako napraviti BoxCrteĹži u RStudio-u
⥠Pametni saŞetak
BoxGrafikon u R-u saĹžima numeriÄku distribuciju kroz medijan, kvartile, viske i outliere koristeÄi geom_boxplot() iz ggplot2. Ovaj vodiÄ gradi dijagram kutije na skupu podataka o kvaliteti zraka i slojeve na bojama, toÄkama, podrhtavanju, zarezima i grupnim usporedbama.

boxplot() u R
boxplot() u R pomaĹže vizualizirati distribuciju podataka po kvartilu i otkriti prisutnost outliera. MoĹžete koristiti geometrijski objekt geom_boxplot() iz biblioteke ggplot2 za crtanje boxplot() u R.
Koristit Äemo skup podataka o kvaliteti zraka za uvoÄenje boxplot() u R s ggplot. Skup podataka biljeĹži dnevna mjerenja kvalitete zraka u New Yorku od svibnja do rujna 1973. i sadrĹži 153 opaĹžanja. Koristit Äemo sljedeÄe varijable:
- Ozon: NumeriÄka varijabla
- Vjetar: NumeriÄka varijabla
- Mjesec: od svibnja do rujna. NumeriÄka varijabla
Prije crtanja, vrijedi znati toÄno ĹĄto svaki dio kutije predstavlja.
Kako Äitati a Box Grafikon: Kvartili, IQR i outlieri
Svaki element kutijastog dijagrama kodira jedan broj iz saĹžetka od pet brojeva. Poznavanje koji je koji pretvara grafikon iz dekoracije u analizu.
- Donja ĹĄarka: prvi kvartil, Q1. Dvadeset pet posto opaĹžanja nalazi se ispod njega.
- SrediĹĄnja linija: drugi kvartil. Njegov poloĹžaj unutar okvira otkriva asimetriju: linija pomaknuta prema dnu znaÄi da su podaci asimetriÄni udesno.
- Gornja ĹĄarka: treÄi kvartil, Q3. Sedamdeset pet posto opaĹžanja nalazi se ispod njega.
- Box visina: interkvartilni raspon, IQR = Q3 â Q1, koji sadrĹži srednju polovicu podataka i standardna je robusna mjera rasprĹĄenosti.
- Brkovi: proteĹžu se do najekstremnijeg opaĹžanja koje je joĹĄ uvijek unutar 1.5 puta IQR najbliĹžeg ĹĄarnira. Oni nisu minimum i maksimum.
- ToÄke iza brkova: opaĹžanja oznaÄena kao outlieri prema tom 1.5 IQR pravilu.
Dva upozorenja. Prvo, "autlier" ovdje je statistiÄka zastavica, a ne pogreĹĄka: u asimetriÄnoj distribuciji poput koncentracije ozona oÄekuju se visoke vrijednosti i ne bi se trebale brisati. Drugo, dijagram kutije skriva oblik distribucije, pa dvije skupine s identiÄnim kutijama mogu imati vrlo razliÄite temeljne podatke. Dodavanje toÄaka podrhtavanja, kao ĹĄto je prikazano dolje, ĹĄtiti od toga.
Box Grafikon vs. histogram vs. graf violine u R-u
Sva tri grafikona opisuju numeriÄku distribuciju, ali svaki otkriva neĹĄto ĹĄto ostali skrivaju.
| Kriteriji | Box ZemljiĹĄte | Histogram | Zaplet violine |
|---|---|---|---|
| Predstave | Medijan, kvartili, outlieri | Frekvencija u svakom spremniku | Krivulja pune gustoÄe |
| RevdostiĹže viĹĄe vrhova | Ne | Da | Da |
| OznaÄava outliere | Da, eksplicitno | Samo vizualno | Ne izravno |
| UsporeÄivanje mnogih grupa | Izvrstan | nespretan | dobro |
| Potreban je izbor tuninga | Ne | Da, broj spremnika | Da, propusnost |
| objekt ggplot2 | geom_boxplot() | geom_histogram() | geom_violina() |
UobiÄajeni kompromis je crtanje dijagrama violine s uskim dijagramom kutije unutar njega, koji zadrĹžava oblik gustoÄe i saĹžetak kvartila u jednom grafikonu. Vidi vodiÄ za histogram za binning stranu usporedbe.
stvoriti Box ZemljiĹĄte
Prije nego poÄnete stvarati svoj prvi boxplot() u R-u, morate manipulirati podacima na sljedeÄi naÄin:
- Korak 1: Uvezite podatke
- Korak 2: Izbacite nepotrebne varijable
- Korak 3: Pretvorite Mjesec u ureÄeni faktor
- Korak 4: Izradite novu kategoriÄku varijablu koja svaki mjesec dijeli na tri dijela: PoÄetak, Sredina i Kraj
- Korak 5: Uklonite zapaĹžanja koja nedostaju
Svi ovi koraci izvode se s dplyr i operatorom cjevovoda %>%.
library(dplyr) library(ggplot2) # Step 1 data_air <- airquality %>% #Step 2 select(-c(Solar.R, Temp)) %>% #Step 3 mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")), #Step 4 day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))
Dobra praksa je provjeriti strukturu podataka pomoÄu funkcije glimpse().
glimpse(data_air)
Izlaz:
## Observations: 153 ## Variables: 5 ## $ Ozone <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ... ## $ Wind <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6... ## $ Month <ord> May, May, May, May, May, May, May, May, May, May, May,... ## $ Day <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,... ## $ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...
I Ozone i Solar.R sadrĹže NA vrijednosti. BuduÄi da bi ih geom_boxplot() tiho odbacio i ispisao upozorenje, ÄiĹĄÄe ih je eksplicitno ukloniti.
# Step 5
data_air_nona <-data_air %>% na.omit()
Osnovna kutijasta parcela
Sada prikaĹžite raspodjelu ozona po mjesecima.
# Store the graph box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone)) # Add the geometric object box plot box_plot + geom_boxplot()
Code ObjaĹĄnjenje
- Pohranite grafikon za daljnju upotrebu
- box_plot: osnovni grafikon pohranjen je u objektu box_plot, ĹĄto vam omoguÄuje kasnije dodavanje slojeva bez ponavljanja cijelog poziva
- Dodajte geometrijski objekt
- Proslijedite skup podataka data_air_nona u ggplot boxplot.
- Unutar aes() argumenta dodajete x-os i y-os.
- Znak + znaÄi da Ĺželite da R nastavi Äitati kod. Äini kĂ´d Äitljivijim razbijanjem.
- Upotrijebite geom_boxplot() za izradu okvirnog dijagrama
Izlaz:
Promijenite stranu grafikona
MoĹžete okrenuti stranu grafikona.
box_plot +
geom_boxplot()+
coord_flip()
Code ObjaĹĄnjenje
- box_plot: Koristite graf koji ste pohranili. Izbjegava ponovno pisanje svih kodova svaki put kada dodate nove informacije na grafikon.
- geom_boxplot(): crtanje kutija i brkova
- coord_flip(): Okrenite stranu grafa
Izlaz:
Promjena boje outliera
MoĹžete promijeniti boju, oblik i veliÄinu outliera.
box_plot +
geom_boxplot(outlier.colour = "red",
outlier.shape = 2,
outlier.size = 3) +
theme_classic()
Code ObjaĹĄnjenje
- outlier.colour=âredâ: Kontrolirajte boju outliera
- outlier.shape=2: Promjena oblika outliera. 2 se odnosi na trokut
- outlier.size=3: Promijeni veliÄinu trokuta. VeÄi brojevi crtaju veÄe markere.
Izlaz:
Dodajte sumarnu statistiku
MoĹžete prekriti saĹžetnu statistiku kao ĹĄto je grupna srednja vrijednost, koju sam kutijasti dijagram ne prikazuje.
box_plot +
geom_boxplot() +
stat_summary(fun.y = mean,
geom = "point",
size = 3,
color = "steelblue") +
theme_classic()
Code ObjaĹĄnjenje
- stat_summary() dodaje izraÄunatu statistiku na vrh kutijastog dijagrama
- Argument fun kontrolira koja se statistika vraÄa. Ovdje je to srednja vrijednost. Imajte na umu da stariji kod koristi fun.y, koji je ggplot2 ukinut u verziji 3.3.0.
- Napomena: Dostupne su i druge statistike kao ĹĄto su min. i maks. U istom grafikonu moĹže se prikazati viĹĄe od jedne statistike
- geom = âtoÄkaâ: iscrtajte prosjek s toÄkom
- veliÄina=3: VeliÄina toÄke
- boja =âsteelblueâ: Boja bodova
Izlaz:
Box Iscrtaj s toÄkama
Zatim dodajte sloj toÄkastog dijagrama na vrh okvira. Svaka toÄka predstavlja jedno opaĹžanje, ĹĄto Äini vidljivom veliÄinu uzorka iza svakog okvira.
box_plot +
geom_boxplot() +
geom_dotplot(binaxis = 'y',
dotsize = 1,
stackdir = 'center') +
theme_classic()
Code ObjaĹĄnjenje
- geom_dotplot() crta jednu toÄku po promatranju, sloĹženu unutar svakog spremnika
- binaxis='y': Promjena poloĹžaja toÄaka duĹž y-osi. Prema zadanim postavkama, x-os
- dotsize=1: VeliÄina toÄaka
- stackdir='center': NaÄin slaganja toÄaka: Äetiri vrijednosti:
- âgoreâ (zadano),
- âdoljeâ
- "centar"
- âcentralna cjelinaâ
Izlaz:
Kontrolna estetika Box ZemljiĹĄte
Promijenite boju kutije
MoĹžete promijeniti boje grupe.
ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) + geom_boxplot() + theme_classic()
Code ObjaĹĄnjenje
- Boje grupa se kontroliraju u aes() mapi.pingMoĹžete koristiti color=Mjesec za promjenu boje okvira i dijagrama brkova prema mjesecima.
Izlaz:
Box parcela s viĹĄe grupa
TakoÄer je moguÄe dodati viĹĄe grupa. MoĹžete vizualizirati razliku u kvaliteti zraka prema danu mjerenja.
ggplot(data_air_nona, aes(Month, Ozone)) + geom_boxplot(aes(fill = day_cat)) + theme_classic()
Code ObjaĹĄnjenje
- Mapa aes()ping geometrijskog objekta kontrolira grupe za prikaz (ova varijabla mora biti faktor)
- aes(fill= day_cat) omoguÄuje stvaranje tri okvira za svaki mjesec na x-osi
Izlaz:
Box Crtanje s isprekidanim toÄkama
Drugi naÄin prikaza pojedinaÄnih opaĹžanja je pomoÄu podrhtavajuÄih toÄaka. Podrhtavanje je uobiÄajeni izbor kada kategoriÄka x-os uzrokuje da se mnoge toÄke naÄu na istoj poziciji.
Ovom metodom se izbjegava preklapanjeping diskretnih podataka.
box_plot +
geom_boxplot() +
geom_jitter(shape = 15,
color = "steelblue",
position = position_jitter(width = 0.21)) +
theme_classic()
Code ObjaĹĄnjenje
- geom_jitter() dodaje mali sluÄajni pomak svakoj toÄki kako bi se preklapanjeping vrijednosti postaju vidljive.
- shape=15 mijenja oblik toÄaka. 15 predstavlja kvadrate
- color = âsteelblueâ: Promjena boje toÄke
- position = position_jitter(width = 0.21): kontrolira koliko su toÄke pomaknute boÄno, mjereno u jedinicama x-osi. Zadana vrijednost je 40 posto razmaka izmeÄu kategorija.
Izlaz:
MoĹžete vidjeti razliku izmeÄu prvog grafikona s jitter metodom i drugog s point metodom.
box_plot +
geom_boxplot() +
geom_point(shape = 5,
color = "steelblue") +
theme_classic()
Reckast Box ZemljiĹĄte
Zanimljiva znaÄajka geom_boxplot() je funkcija boxplot s usjecima u R. GrafiÄki prikaz s usjecima suĹžava okvir oko medijana. Glavna svrha dijagrama s urezima je usporedba znaÄajnosti medijana izmeÄu skupina. Postoje jaki dokazi da dvije skupine imaju razliÄite medijane kada se zarezi ne preklapaju. Zarez se izraÄunava na sljedeÄi naÄin:
Ovdje je IQR interkvartilni raspon, a n je broj opaĹžanja u skupini. Razina obuhvaÄa otprilike 95-postotni interval pouzdanosti medijana.
box_plot +
geom_boxplot(notch = TRUE) +
theme_classic()
Code ObjaĹĄnjenje
- geom_boxplot(notch = TRUE): nacrtaj kutijasti dijagram sa zarezima oko medijane
Izlaz:
Kako dodati naslove, oznake i prilagoÄene boje Box Grafikon u R-u
Gornji grafikoni koriste zadane vrijednosti ggplot2, koje uzimaju nazive varijabli izravno iz okvira podataka. Grafikon koji se moĹže objaviti treba Äitljive oznake i namjernu paletu.
Naslovi i oznake osi. Jedan poziv funkcije labs() postavlja svaki tekstualni element:
box_plot +
geom_boxplot(fill = "coral", alpha = 0.7) +
labs(title = "Ozone concentration by month",
subtitle = "New York, May to September 1973",
x = "Month",
y = "Ozone (parts per billion)",
caption = "Source: airquality dataset") +
theme_classic()
Odabir vlastitih boja. Koristite scale_fill_manual() kada je ispuna mapirana unutar aes(), a scale_colour_manual() kada je boja:
ggplot(data_air_nona, aes(x = Month, y = Ozone, fill = Month)) + geom_boxplot() + scale_fill_manual(values = c("#0e9cd1", "coral", "#7dc27d", "#c9a227", "grey60")) + theme_classic() + theme(legend.position = "none")
Legenda je ovdje iskljuÄena jer x-osa veÄ imenuje svaki mjesec, pa bi njezino ponavljanje gubilo prostor.
PreureÄivanje kutija. Razine faktora odreÄuju redoslijed na osi. BuduÄi da je Mjesec kreiran kao ureÄeni faktor, veÄ se Äita kronoloĹĄki. Za neureÄeni faktor, umjesto toga sortirajte prema medijanu:
ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) + geom_boxplot() + theme_classic()
Spremanje grafikona. ggsave() zapisuje posljednji grafikon na disk u rezoluciji koju kontrolirate:
ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)
Box Grafikon u R-u: Code UpuÄivanje
Donja tablica navodi poziv ggplot2 za svaku varijantu kutijastog dijagrama opisanu gore:
| Cilj | Code |
|---|---|
| Osnovna kutijasta parcela |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() |
| Okreni orijentaciju |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip() |
| Urezana okvirna parcela |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE) |
| Box plot s isprekidanim toÄkama |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21)) |
| Bojanje po grupi |
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot() |
| ViĹĄe grupa po kategoriji |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2)) |
| Dodajte srednju vrijednost grupe |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point") |
TakoÄer provjerite: - R VodiÄ za poÄetnike: NauÄite R programski jezik











