boxplot() v R: How to Make BoxGrafy v RStudio
⚡ Chytré shrnutí
BoxFunkce plot v jazyce R shrnuje numerické rozdělení prostřednictvím mediánu, kvartilů, whiskery a odlehlých hodnot pomocí funkce geom_boxplot() z ggplot2. Tento návod vytváří krabicový graf na datové sadě o kvalitě ovzduší a vrství barvy, tečky, jitter, zářezy a skupinová porovnání.
boxplot() v R
boxplot() v R pomáhá vizualizovat rozdělení dat podle kvartilů a detekovat přítomnost odlehlých hodnot. Ke kreslení boxplot() v R můžete použít geometrický objekt geom_boxplot() z knihovny ggplot2.
Datovou sadu o kvalitě ovzduší použijeme k zavedení funkce boxplot() v R s funkcí ggplot. Datová sada zaznamenává denní měření kvality ovzduší v New Yorku od května do září 1973 a obsahuje 153 pozorování. Použijeme následující proměnné:
- Ozon: Číselná proměnná
- Vítr: Numerická proměnná
- Měsíc: květen až září. Numerická proměnná
Než si ji nakreslíte, je dobré vědět, co přesně každá část krabice představuje.
Jak číst a Box Graf: Kvartily, IQR a odlehlé hodnoty
Každý prvek krabicového grafu kóduje jedno číslo z pětičíselného souhrnu. Vědět, které je které, promění graf z dekorace v analýzu.
- Spodní pant: první kvartil, Q1. Dvacet pět procent pozorování se nachází pod ním.
- Střední čára: druhý kvartil. Jeho poloha uvnitř rámečku odhaluje zkosení: čára posunutá směrem dolů znamená, že data jsou zkosená doprava.
- Horní pant: třetí kvartil, Q3. Sedmdesát pět procent pozorování se nachází pod ním.
- Box výška: mezikvartilový rozsah, IQR = Q3 – Q1, který obsahuje střední polovinu dat a je standardním robustním měřítkem rozptylu.
- Kníry: Rozšíří se až k nejextrémnějšímu pozorování, které je stále v rozmezí 1.5násobku IQR nejbližšího pantu. Nejedná se o minimum a maximum.
- Body za vousy: pozorování označená jako odlehlé hodnoty podle pravidla 1.5 IQR.
Dvě upozornění. Zaprvé, „odlehlá hodnota“ je zde statistický příznak, nikoli chyba: v asymetrickém rozdělení, jako je koncentrace ozonu, se očekávají vysoké hodnoty a neměly by být mazány. Zadruhé, krabicový graf skrývá tvar rozdělení, takže dvě skupiny se stejnými krabicemi mohou mít velmi odlišná podkladová data. Přidání bodů s jitterem, jak je znázorněno níže, tomu předchází.
Box Graf vs. histogram vs. houslový graf v R
Všechny tři grafy popisují číselné rozdělení, ale každý z nich odhaluje něco, co ostatní skrývají.
| Kritéria | Box Spiknutí | Histogram | Houslový děj |
|---|---|---|---|
| Výstavy | Medián, kvartily, odlehlé hodnoty | Frekvence v každém koši | Plná křivka hustoty |
| Revdosahuje více vrcholů | Ne | Ano | Ano |
| Vlajky odlehlých hodnot | Ano, explicitně | Pouze vizuálně | Ne přímo |
| Porovnání mnoha skupin | vynikající | trapný | dobrý |
| Potřebuje výběr ladění | Ne | Ano, počet košů | Ano, šířka pásma |
| objekt ggplot2 | geom_boxplot() | geom_histogram() | geom_violin() |
Běžným kompromisem je nakreslení houslového grafu s úzkým krabicovým grafem uvnitř, který zachovává tvar hustoty a souhrn kvartilů v jednom grafu. Viz tutoriál k histogramu pro binningovou stranu srovnání.
Vytvořit Box Spiknutí
Než začnete vytvářet svůj první boxplot() v R, musíte s daty manipulovat následovně:
- Krok 1: Importujte data
- Krok 2: Odstraňte nepotřebné proměnné
- Krok 3: Převeďte Měsíc na uspořádaný faktor
- Krok 4: Vytvořte novou kategoriální proměnnou, která každý měsíc rozdělí na tři části: Začátek, Prostředek a Konec
- Krok 5: Odstraňte chybějící pozorování
Všechny tyto kroky se provádějí pomocí dplyr a operátora potrubí %>%.
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"))))
Osvědčeným postupem je zkontrolovat strukturu dat pomocí funkce glimpse().
glimpse(data_air)
Výstup:
## 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...
Jak Ozone, tak Solar.R obsahují hodnoty NA. Protože by je geom_boxplot() tiše odstranila a vypsala varování, je čistší je explicitně odstranit.
# Step 5
data_air_nona <-data_air %>% na.omit()
Základní krabicová zápletka
Nyní znázorněte rozložení ozonu podle měsíců.
# 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 Vysvětlení
- Uložte graf pro další použití
- box_plot: základní graf je uložen v objektu box_plot, což umožňuje později přidávat vrstvy bez opakování celého volání
- Přidejte geometrický objekt
- Dataset data_air_nona předáte do ggplot boxplot.
- Do argumentu aes() přidáte osu x a osu y.
- Znak + znamená, že chcete, aby R pokračoval ve čtení kódu. Dělá kód čitelnějším tím, že jej prolomí.
- Pomocí geom_boxplot() vytvořte krabicový graf
Výstup:
Změňte stranu grafu
Můžete otočit stranu grafu.
box_plot +
geom_boxplot()+
coord_flip()
Code Vysvětlení
- box_plot: Používáte graf, který jste si uložili. Vyhne se přepisování všech kódů pokaždé, když do grafu přidáte nové informace.
- geom_boxplot(): nakreslí čtverečky a vousy
- coord_flip(): Otočení strany grafu
Výstup:
Změnit barvu odlehlé hodnoty
Můžete změnit barvu, tvar a velikost odlehlých hodnot.
box_plot +
geom_boxplot(outlier.colour = "red",
outlier.shape = 2,
outlier.size = 3) +
theme_classic()
Code Vysvětlení
- outlier.colour=”red”: Ovládejte barvu odlehlých hodnot
- outlier.shape=2: Změní tvar odlehlé hodnoty. 2 odkazuje na trojúhelník
- outlier.size=3: Změní velikost trojúhelníku. Větší čísla vykreslují větší značky.
Výstup:
Přidejte souhrnnou statistiku
Můžete překrýt souhrnnou statistiku, jako je například skupinový průměr, který samotný krabicový graf nezobrazuje.
box_plot +
geom_boxplot() +
stat_summary(fun.y = mean,
geom = "point",
size = 3,
color = "steelblue") +
theme_classic()
Code Vysvětlení
- Funkce stat_summary() přidá vypočítanou statistiku na vrchol krabicového grafu.
- Argument fun určuje, která statistika se vrátí. Zde se jedná o průměr. Všimněte si, že starší kód používá fun.y, který byl ve verzi ggplot2 zastaralý.
- Poznámka: K dispozici jsou další statistiky, jako je min. a max. V jednom grafu lze zobrazit více než jednu statistiku
- geom = „bod“: Vyneste průměr s bodem
- size=3: Velikost bodu
- barva =”ocelová modrá”: Barva bodů
Výstup:
Box Zápletka s tečkami
Dále přidejte na rámečky vrstvu bodového grafu. Každá tečka představuje jedno pozorování, což zviditelní velikost vzorku za každým rámečkem.
box_plot +
geom_boxplot() +
geom_dotplot(binaxis = 'y',
dotsize = 1,
stackdir = 'center') +
theme_classic()
Code Vysvětlení
- geom_dotplot() vykreslí jednu tečku na pozorování, naskládanou v každém koši.
- binaxis='y': Změňte polohu teček podél osy y. Ve výchozím nastavení osa x
- dotsize=1: Velikost teček
- stackdir='center': Způsob, jak skládat tečky: Čtyři hodnoty:
- „nahoru“ (výchozí),
- "dolů"
- "centrum"
- "uprostřed"
Výstup:
Ovládání Estetika Box Spiknutí
Změňte barvu krabice
Můžete změnit barvy skupiny.
ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) + geom_boxplot() + theme_classic()
Code Vysvětlení
- Barvy skupin jsou řízeny v mapě aes().pingPro změnu barvy rámečku a vousového grafu podle měsíců můžete použít color=Month.
Výstup:
Box zápletka s více skupinami
Je také možné přidat více skupin. Rozdíl v kvalitě vzduchu si můžete vizualizovat podle dne měření.
ggplot(data_air_nona, aes(Month, Ozone)) + geom_boxplot(aes(fill = day_cat)) + theme_classic()
Code Vysvětlení
- Mapa aes()ping geometrického objektu řídí skupiny, které se mají zobrazit (tato proměnná musí být faktor)
- aes(fill= day_cat) umožňuje vytvořit tři rámečky pro každý měsíc na ose x
Výstup:
Box Zápletka s roztřesenými tečkami
Dalším způsobem, jak zobrazit jednotlivá pozorování, jsou chvění bodů. Chvění je obvyklá volba, když kategorická osa x způsobí, že se mnoho bodů dostane na stejnou pozici.
Tato metoda zabraňuje překrýváníping diskrétních dat.
box_plot +
geom_boxplot() +
geom_jitter(shape = 15,
color = "steelblue",
position = position_jitter(width = 0.21)) +
theme_classic()
Code Vysvětlení
- geom_jitter() přidá malé náhodné posunutí ke každému bodu, aby se překrývalyping hodnoty se stanou viditelnými.
- shape=15 mění tvar bodů. 15 představuje čtverce
- barva = „ocelově modrá“: Změna barvy bodu
- position = position_jitter(width = 0.21): určuje, o kolik jsou body posunuty do stran, měřeno v jednotkách osy x. Výchozí hodnota je 40 procent rozteče mezi kategoriemi.
Výstup:
Můžete vidět rozdíl mezi prvním grafem s metodou jitter a druhým s bodovou metodou.
box_plot +
geom_boxplot() +
geom_point(shape = 5,
color = "steelblue") +
theme_classic()
Vroubkované Box Spiknutí
Zajímavou vlastností geom_boxplot() je vrubová funkce boxplot v R. Notch plot zužuje rámeček kolem mediánu. Hlavním účelem vrubového krabicového grafu je porovnat významnost mediánu mezi skupinami. Existují silné důkazy, že dvě skupiny mají různé mediány, když se zářezy nepřekrývají. Zářez se vypočítá následovně:
Zde IQR představuje interkvartilní rozpětí a n je počet pozorování ve skupině. Zářez zhruba pokrývá 95% interval spolehlivosti mediánu.
box_plot +
geom_boxplot(notch = TRUE) +
theme_classic()
Code Vysvětlení
- geom_boxplot(notch = TRUE): nakreslí krabicový graf se zářezy kolem středové osy
Výstup:
Jak přidat nadpisy, popisky a vlastní barvy do Box Graf v R
Výše uvedené grafy používají výchozí hodnoty ggplot2, které přebírají názvy proměnných přímo z datového rámce. Publikovatelný graf potřebuje čitelné popisky a promyšlenou paletu.
Názvy a popisky os. Jedno volání labs() nastaví každý textový prvek:
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()
Výběr vlastních barev. Použijte scale_fill_manual() , když je fill mapován uvnitř aes() , a scale_colour_manual() , když je barva:
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 zde vypnutá, protože osa x již pojmenovává jednotlivé měsíce, takže její opakování by plýtvalo místem.
Znovuobjednávání krabic. Úrovně faktorů řídí pořadí na ose. Protože Měsíc byl vytvořen jako seřazený faktor, je již chronologicky seřazen. V případě neuspořádaného faktoru seřaďte místo toho podle mediánu:
ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) + geom_boxplot() + theme_classic()
Ukládání grafu. Funkce ggsave() zapíše poslední graf na disk v rozlišení, které určíte:
ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)
Box Graf v R: Code Odkaz
Níže uvedená tabulka uvádí volání ggplot2 pro každou variantu krabicového grafu uvedenou výše:
| Objektivní | Code |
|---|---|
| Základní krabicová zápletka |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() |
| Otočit orientaci |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip() |
| Vroubkovaná krabicová zápletka |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE) |
| Box zápletka s roztřesenými tečkami |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21)) |
| Vybarvi podle skupiny |
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot() |
| Více skupin v každé kategorii |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2)) |
| Přičtěte průměr skupiny |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point") |
Zkontrolujte také: - Kurz R pro začátečníky: Naučte se programovací jazyk R












