boxplot() in R: How to Make BoxÁbrák az RStudio-ban
⚡ Okos összefoglaló
BoxAz R-ben a plot egy numerikus eloszlást összegez a medián, a kvartilisek, a whiskerek és a kiugró értékek segítségével a ggplot2 geom_boxplot() függvényével. Ez a bemutató egy dobozdiagramot készít a levegőminőségi adathalmazon, és rétegeket készít a színek, pontok, időzítés, bevágások és csoportos összehasonlítások alapján.

boxplot() az R-ben
boxplot() az R-ben segít az adatok kvartilis szerinti eloszlásának megjelenítésében és a kiugró értékek kimutatásában. Használhatja a geom_boxplot() geometriai objektumot a ggplot2 könyvtárból egy boxplot() rajzolásához R-ben.
A levegőminőségi adathalmazt fogjuk használni a boxplot() bevezetéséhez R-ben a ggplot segítségével. Az adathalmaz New York napi levegőminőségi méréseit rögzíti 1973 májusa és szeptembere között, és 153 megfigyelést tartalmaz. A következő változókat fogjuk használni:
- Ózon: numerikus változó
- Szél: Numerikus változó
- Hónap: májustól szeptemberig. Numerikus változó
Mielőtt lerajzolnánk egyet, érdemes pontosan tudni, hogy mit jelképez a doboz egyes részei.
Hogyan kell olvasni a Box Ábrán: Kvartilisek, IQR és kiugró értékek
Egy dobozdiagram minden eleme egy számot kódol az ötszámos összefoglalásból. Ha tudjuk, melyik melyik, akkor a diagram dekorációból elemzéssé válik.
- Alsó zsanér: az első kvartilis, a Q1. A megfigyelések huszonöt százaléka ez alatt található.
- Középvonal: a második kvartilis. A dobozon belüli helyzete ferdülést mutat: az alsó vonal azt jelenti, hogy az adatok jobbra ferdültek.
- Felső zsanér: a harmadik kvartilis, a Q3. A megfigyelések hetvenöt százaléka ez alatt található.
- Box magasság: az interkvartilis tartomány, IQR = Q3 – Q1, amely az adatok középső felét tartalmazza, és a terjedés standard robusztus mérőszáma.
- Pofaszakáll: A legszélsőségesebb megfigyelésig terjednek, még mindig a legközelebbi csuklópont IQR-jének 1.5-szeresén belül. Nem ezek a minimum és a maximum.
- Pontok a bajuszon túl: az 1.5-ös IQR szabály által kiugróként megjelölt megfigyelések.
Két figyelmeztetés. Először is, a „kiugró érték” itt egy statisztikai jelzés, nem pedig hiba: egy ferde eloszlásban, mint például az ózonkoncentrációban, magas értékek várhatók, és ezeket nem szabad törölni. Másodszor, a dobozdiagram elrejti az eloszlás alakját, így két azonos dobozzal rendelkező csoportnak nagyon eltérő alapadatai lehetnek. A jitteres pontok hozzáadása, amint az alább látható, ezt kivédi.
Box Plot vs Histogram vs Violin Plot R-ben
Mindhárom diagram egy numerikus eloszlást ír le, de mindegyik felfed valamit, amit a többi elrejt.
| Kritériumai | Box Cselekmény | hisztogram | Hegedűs cselekmény |
|---|---|---|---|
| Műsorok | Medián, kvartilisek, kiugró értékek | Gyakoriság az egyes tárolókban | Teljes sűrűséggörbe |
| Revtöbb csúcsot is elér | Nem | Igen | Igen |
| Jelzi a kiugró értékeket | Igen, kifejezetten | Csak vizuálisan | Nem közvetlenül |
| Sok csoport összehasonlítása | Kiváló | Kínos | Jó |
| Tuningválasztásra van szükség | Nem | Igen, kukák száma | Igen, sávszélesség |
| ggplot2 objektum | geom_boxplot() | geom_hisztogram() | geom_violin() |
Gyakori kompromisszum, hogy egy hegedűdiagramot egy keskeny dobozdiagrammal rajzolnak, amely egyetlen diagramon tartja a sűrűségalakzatot és a kvartilis összegzést. Lásd a hisztogram bemutató az összehasonlítás binning oldalához.
Teremt Box Cselekmény
Mielőtt elkezdené az első boxplot() létrehozását R-ben, a következőképpen kell manipulálnia az adatokat:
- 1. lépés: Importálja az adatokat
- 2. lépés: Dobja el a szükségtelen változókat
- 3. lépés: A hónap rendezett tényezővé alakítása
- 4. lépés: Hozz létre egy új kategorikus változót, amely minden hónapot három részre oszt: Kezdet, Középső és Vége
- 5. lépés: Távolítsa el a hiányzó megfigyeléseket
Mindezek a lépések a dplyr és a %>% pipeline operátor segítségével hajthatók végre.
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"))))
Jó gyakorlat az adatok szerkezetének ellenőrzése a glimpse() függvénnyel.
glimpse(data_air)
output:
## 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...
Mind az Ozone, mind a Solar.R tartalmaz NA értékeket. Mivel a geom_boxplot() csendben eltörölné ezeket, és figyelmeztetést írna ki, célszerűbb explicit módon eltávolítani őket.
# Step 5
data_air_nona <-data_air %>% na.omit()
Alapvető dobozrajz
Most ábrázold az ózon eloszlását havonta.
# 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 Magyarázat
- Tárolja a grafikont további felhasználás céljából
- box_plot: az alapdiagram a box_plot objektumban tárolódik, ami lehetővé teszi rétegek hozzáadását később a teljes hívás megismétlése nélkül.
- Adja hozzá a geometriai objektumot
- A data_air_nona adatkészletet átadja a ggplot boxplotnak.
- Az aes() argumentumon belül hozzáadja az x tengelyt és az y tengelyt.
- A + jel azt jelenti, hogy azt szeretné, hogy R továbbra is olvassa a kódot. Feltörésével olvashatóbbá teszi a kódot.
- A geom_boxplot() segítségével hozzon létre egy dobozdiagramot
output:
Változtassa meg a grafikon oldalát
Megfordíthatja a grafikon oldalát.
box_plot +
geom_boxplot()+
coord_flip()
Code Magyarázat
- box_plot: A tárolt grafikont használja. Ez elkerüli az összes kód újraírását minden alkalommal, amikor új információt ad a grafikonhoz.
- geom_boxplot(): dobozok és bajuszvonalak kirajzolása
- coord_flip(): A grafikon oldalának megfordítása
output:
Változtassa meg a kiugró színt
Módosíthatja a kiugró csíkok színét, alakját és méretét.
box_plot +
geom_boxplot(outlier.colour = "red",
outlier.shape = 2,
outlier.size = 3) +
theme_classic()
Code Magyarázat
- outlier.colour=”red”: A kiugró értékek színének szabályozása
- outlier.shape=2: A kiugró alakzat módosítása. A 2 a háromszögre vonatkozik
- outlier.size=3: A háromszög méretének módosítása. Nagyobb számok nagyobb jelölőket rajzolnak.
output:
Összefoglaló statisztika hozzáadása
Rávetíthet egy összesítő statisztikát, például a csoportátlagot, amelyet maga a dobozdiagram nem mutat.
box_plot +
geom_boxplot() +
stat_summary(fun.y = mean,
geom = "point",
size = 3,
color = "steelblue") +
theme_classic()
Code Magyarázat
- A stat_summary() függvény egy számított statisztikát ad hozzá a dobozdiagram tetejéhez.
- A fun argumentum szabályozza, hogy melyik statisztika kerüljön visszaadásra. Itt ez az átlag. Megjegyzendő, hogy a régebbi kód a fun.y fájlt használja, amely a ggplot2 3.3.0-s verziójában elavult.
- Megjegyzés: Egyéb statisztikák is elérhetők, például min és max. Egynél több statisztika is megjeleníthető ugyanazon a grafikonon
- geom = „pont”: ábrázolja az átlagot egy ponttal
- size=3: A pont mérete
- szín =”acélkék”: A pontok színe
output:
Box Telek pontokkal
Ezután adj hozzá egy pontdiagram réteget a dobozok tetejére. Minden pont egyetlen megfigyelést jelöl, így láthatóvá válik a dobozok mögötti minta mérete.
box_plot +
geom_boxplot() +
geom_dotplot(binaxis = 'y',
dotsize = 1,
stackdir = 'center') +
theme_classic()
Code Magyarázat
- A geom_dotplot() egy pontot rajzol minden megfigyeléshez, minden rekeszbe halmozva.
- binaxis='y': Módosítsa a pontok helyzetét az y tengely mentén. Alapértelmezés szerint x-tengely
- dotsize=1: A pontok mérete
- stackdir='center': A pontok halmozásának módja: Négy érték:
- „fel” (alapértelmezett),
- "le"
- "központ"
- "középpont"
output:
Ellenőrzés Esztétika a Box Cselekmény
Változtassa meg a doboz színét
Megváltoztathatja a csoport színeit.
ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) + geom_boxplot() + theme_classic()
Code Magyarázat
- A csoportok színeit az aes() map szabályozza.pingA color= Month paraméterrel módosíthatod a doboz és a bajuszdiagram színét a hónapoknak megfelelően.
output:
Box telek több csoporttal
Lehetőség van több csoport hozzáadására is. Megjelenítheti a levegőminőség különbségét a mérés napja szerint.
ggplot(data_air_nona, aes(Month, Ozone)) + geom_boxplot(aes(fill = day_cat)) + theme_classic()
Code Magyarázat
- Az aes() térképping a geometriai objektum változója vezérli a megjelenítendő csoportokat (ennek a változónak faktornak kell lennie)
- Az aes(fill= day_cat) lehetővé teszi három doboz létrehozását minden hónaphoz az x tengelyen
output:
Box Telek remegő pontokkal
Az egyes megfigyelések ábrázolásának egy másik módja a jitteres pontok használata. A jitterezés a szokásos választás, amikor egy kategorikus x tengely miatt sok pont ugyanarra a pozícióra kerül.
Ez a módszer elkerüli az átfedéstping a diszkrét adatok közül.
box_plot +
geom_boxplot() +
geom_jitter(shape = 15,
color = "steelblue",
position = position_jitter(width = 0.21)) +
theme_classic()
Code Magyarázat
- A geom_jitter() függvény minden ponthoz egy kis véletlenszerű elmozdulást ad hozzá, így átfedi a pontokat.ping értékek válnak láthatóvá.
- shape=15 megváltoztatja a pontok alakját. A 15 a négyzeteket jelöli
- szín = „acélkék”: a pont színének módosítása
- position = position_jitter(szélesség = 0.21): azt szabályozza, hogy a pontok milyen mértékben mozduljanak el oldalirányban, x tengely mértékegységben mérve. Az alapértelmezett érték a kategóriák közötti távolság 40 százaléka.
output:
Látható a különbség az első grafikon között a jitter módszerrel és a második között a pont módszerrel.
box_plot +
geom_boxplot() +
geom_point(shape = 5,
color = "steelblue") +
theme_classic()
hornyolt Box Cselekmény
A geom_boxplot() érdekes tulajdonsága az R bevágásos boxplot függvénye. A bevágási diagram leszűkíti a mezőt a medián körül. A bemetszett dobozos diagram fő célja a medián jelentőségének összehasonlítása a csoportok között. Szilárd bizonyíték van arra, hogy két csoport eltérő mediánnal rendelkezik, amikor a bevágások nem fedik át egymást. A bevágás kiszámítása a következőképpen történik:
Itt az IQR az interkvartilis tartományt, n pedig a csoporton belüli megfigyelések számát jelöli. A bevágás nagyjából a medián 95 százalékos konfidenciaintervallumát fedi le.
box_plot +
geom_boxplot(notch = TRUE) +
theme_classic()
Code Magyarázat
- geom_boxplot(notch = TRUE): a dobozdiagramot a medián körüli bevágásokkal rajzolja ki
output:
Címek, címkék és egyéni színek hozzáadása egyhez Box R-ben ábrázolt telek
A fenti diagramok a ggplot2 alapértelmezett értékeit használják, amelyek a változóneveket közvetlenül az adatkeretből veszik. Egy közzétehető diagramhoz olvasható címkékre és egy átgondolt palettára van szükség.
Címek és tengelyfeliratok. Egyetlen labs() hívás beállítja az összes szöveges elemet:
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()
Saját színek kiválasztása. Használd a scale_fill_manual() függvényt, ha a kitöltés az aes() függvényen belül van leképezve, és a scale_colour_manual() függvényt, ha a szín:
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")
A jelmagyarázat itt ki van kapcsolva, mivel az x tengely már tartalmazza az egyes hónapok nevét, így az ismétlése helypazarlás lenne.
A dobozok átrendezése. A faktorszintek határozzák meg a tengely sorrendjét. Mivel a Hónap rendezett faktorként lett létrehozva, már kronológiai sorrendben olvasható. Rendezetlen faktorok esetén a medián szerint kell rendezni:
ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) + geom_boxplot() + theme_classic()
A diagram mentése. A ggsave() függvény az utolsó diagramot lemezre írja egy általad beállított felbontásban:
ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)
Box Ábrázolás R-ben: Code Referencia
Az alábbi táblázat felsorolja a ggplot2 hívást a fent tárgyalt dobozdiagram-változatokhoz:
| Objektív | Code |
|---|---|
| Alapvető dobozrajz |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() |
| Fordítsa meg a tájolást |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip() |
| Vágott dobozos telek |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE) |
| Box cselekmény remegő pontokkal |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21)) |
| Színezés csoportonként |
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot() |
| Több csoport kategóriánként |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2)) |
| Adja hozzá a csoport átlagát |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point") |
Ellenőrizze még:- R oktatóanyag kezdőknek: Ismerje meg az R programozási nyelvet











