boxplot() in R: Wie man BoxDiagramme in RStudio
⚡ Intelligente Zusammenfassung
BoxMit `geom_boxplot()` aus ggplot2 lässt sich in R eine numerische Verteilung anhand von Median, Quartilen, Whisker und Ausreißern zusammenfassen. Diese Anleitung erstellt einen Boxplot für den Datensatz zur Luftqualität und fügt Farb-, Punkt-, Jitter-, Kerb- und Gruppenvergleichsebenen hinzu.
boxplot() in R
boxplot() in R hilft, die Verteilung der Daten nach Quartil zu visualisieren und das Vorhandensein von Ausreißern zu erkennen. Sie können das geometrische Objekt geom_boxplot() aus der ggplot2-Bibliothek verwenden, um ein Boxplot() in R zu zeichnen.
Wir verwenden den Datensatz zur Luftqualität, um die Funktion `boxplot()` in R mit ggplot einzuführen. Der Datensatz enthält tägliche Luftqualitätsmessungen in New York von Mai bis September 1973 und umfasst 153 Beobachtungen. Wir verwenden die folgenden Variablen:
- Ozon: Numerische Variable
- Wind: Numerische Variable
- Monat: Mai bis September. Numerische Variable
Bevor man eine solche Box zeichnet, sollte man genau wissen, was jeder Teil der Box darstellt.
So lesen Sie a Box Diagramm: Quartile, Interquartilsabstand und Ausreißer
Jedes Element eines Boxplots kodiert eine der fünf Kennzahlen der Zusammenfassung. Kennt man die einzelnen Elemente, wird das Diagramm von einer reinen Dekoration zu einer aussagekräftigen Analyse.
- Unteres Scharnier: Das erste Quartil, Q1. Fünfundzwanzig Prozent der Beobachtungen liegen darunter.
- Mittellinie: Das zweite Quartil. Seine Position innerhalb der Box zeigt die Schiefe an: Eine Linie, die zum unteren Rand hin verschoben ist, bedeutet, dass die Daten rechtsschief verteilt sind.
- Oberes Scharnier: Das dritte Quartil, Q3. Fünfundsiebzig Prozent der Beobachtungen liegen darunter.
- Box Höhe: Der Interquartilsabstand, IQR = Q3 – Q1, umfasst die mittlere Hälfte der Daten und ist das standardmäßige robuste Streuungsmaß.
- Schnurrhaare: Sie erstrecken sich bis zum extremsten Messwert, der noch innerhalb des 1.5-fachen des Interquartilsabstands (IQR) des nächstgelegenen Scharniers liegt. Es handelt sich dabei nicht um das Minimum und Maximum.
- Punkte jenseits des Üblichen: Beobachtungen, die gemäß der 1.5-IQR-Regel als Ausreißer gekennzeichnet wurden.
Zwei wichtige Hinweise. Erstens: Ein Ausreißer ist hier ein statistisches Indiz, kein Fehler: Bei einer schiefen Verteilung wie der Ozonkonzentration sind hohe Werte zu erwarten und sollten nicht gelöscht werden. Zweitens: Ein Boxplot verschleiert die Form der Verteilung, sodass zwei Gruppen mit identischen Boxen sehr unterschiedliche zugrundeliegende Daten aufweisen können. Das Hinzufügen von leicht versetzten Punkten, wie unten dargestellt, verhindert dies.
Box Diagramm vs. Histogramm vs. Violinendiagramm in R
Alle drei Diagramme beschreiben eine numerische Verteilung, aber jedes offenbart etwas, was die anderen verbergen.
| Eigenschaften | Box Grundfläche | Histogramm | Violine Plot |
|---|---|---|---|
| Konzerte | Median, Quartile, Ausreißer | Häufigkeit in jedem Bin | Vollständige Dichtekurve |
| Revmehrere Gipfel | Nein | Ja | Ja |
| Flaggen-Ausreißer | Ja, ausdrücklich. | Nur visuell | Nicht direkt |
| Vergleich vieler Gruppen | Ausgezeichnet | Umständlich | Gut |
| Benötigt eine Abstimmungsoption | Nein | Ja, Behälterzählung | Ja, Bandbreite |
| ggplot2-Objekt | geom_boxplot() | geom_histogram() | geom_violin() |
Ein gängiger Kompromiss besteht darin, ein Violinendiagramm mit einem schmalen Boxplot darin zu zeichnen, wodurch die Dichtefunktion und die Quartilsübersicht in einem einzigen Diagramm dargestellt werden. Siehe dazu Histogramm-Tutorial für die Einteilungsseite des Vergleichs.
Erschaffung Box Grundfläche
Bevor Sie mit der Erstellung Ihres ersten Boxplots() in R beginnen, müssen Sie die Daten wie folgt bearbeiten:
- Schritt 1: Importieren Sie die Daten
- Schritt 2: Löschen Sie unnötige Variablen
- Schritt 3: Monat in einen geordneten Faktor umwandeln
- Schritt 4: Erstellen Sie eine neue kategoriale Variable, die jeden Monat in drei Teile unterteilt: Anfang, Mitte und Ende.
- Schritt 5: Fehlende Beobachtungen entfernen
Alle diese Schritte werden mit dplyr und dem Pipeline-Operator %>% ausgeführt.
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"))))
Eine gute Vorgehensweise besteht darin, die Struktur der Daten mit der Funktion glimpse() zu überprüfen.
glimpse(data_air)
Ausgang:
## 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...
Sowohl Ozone als auch Solar.R enthalten NA-Werte. Da geom_boxplot() diese stillschweigend entfernen und eine Warnung ausgeben würde, ist es sauberer, sie explizit zu entfernen.
# Step 5
data_air_nona <-data_air %>% na.omit()
Einfaches Boxplot
Stellen Sie nun die monatliche Verteilung des Ozons grafisch dar.
# 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 Erläuterung
- Speichern Sie das Diagramm zur weiteren Verwendung
- box_plot: Das Basisdiagramm wird im Objekt box_plot gespeichert, wodurch Sie später Ebenen hinzufügen können, ohne den gesamten Aufruf wiederholen zu müssen.
- Füge das geometrische Objekt hinzu.
- Sie übergeben den Datensatz data_air_nona an ggplot boxplot.
- Innerhalb des aes()-Arguments fügen Sie die x-Achse und die y-Achse hinzu.
- Das +-Zeichen bedeutet, dass R den Code weiterlesen soll. Es unterbricht den Code und macht ihn dadurch lesbarer.
- Verwenden Sie geom_boxplot(), um ein Boxplot zu erstellen
Ausgang:
Seite des Diagramms wechseln
Sie können die Seite des Diagramms umdrehen.
box_plot +
geom_boxplot()+
coord_flip()
Code Erläuterung
- box_plot: Sie verwenden das von Ihnen gespeicherte Diagramm. So müssen Sie nicht jedes Mal alle Codes neu schreiben, wenn Sie dem Diagramm neue Informationen hinzufügen.
- geom_boxplot(): Zeichnet die Boxen und Whisker
- coord_flip(): Die Seite des Diagramms umdrehen
Ausgang:
Farbe des Ausreißers ändern
Sie können die Farbe, Form und Größe der Ausreißer ändern.
box_plot +
geom_boxplot(outlier.colour = "red",
outlier.shape = 2,
outlier.size = 3) +
theme_classic()
Code Erläuterung
- outlier.colour=“red“: Steuern Sie die Farbe der Ausreißer
- outlier.shape=2: Ändert die Form des Ausreißers. 2 bezieht sich auf Dreieck
- outlier.size=3: Ändert die Größe des Dreiecks. Größere Zahlen erzeugen größere Markierungen.
Ausgang:
Fügen Sie eine zusammenfassende Statistik hinzu
Sie können eine zusammenfassende Statistik wie den Gruppenmittelwert einblenden, die im Boxplot selbst nicht angezeigt wird.
box_plot +
geom_boxplot() +
stat_summary(fun.y = mean,
geom = "point",
size = 3,
color = "steelblue") +
theme_classic()
Code Erläuterung
- stat_summary() fügt eine berechnete Statistik über dem Boxplot hinzu.
- Das Argument `fun` steuert, welche Statistik zurückgegeben wird. Hier ist es der Mittelwert. Beachten Sie, dass älterer Code `fun.y` verwendet, welches in ggplot2 ab Version 3.3.0 als veraltet markiert wurde.
- Hinweis: Es sind auch andere Statistiken verfügbar, z. B. Min. und Max. Im selben Diagramm können mehrere Statistiken angezeigt werden
- geom = „point“: Den Durchschnitt mit einem Punkt grafisch darstellen
- size=3: Größe des Punktes
- color =“steelblue“: Farbe der Punkte
Ausgang:
Box Plot mit Punkten
Fügen Sie als Nächstes eine Punktediagramm-Ebene über den Kästchen hinzu. Jeder Punkt repräsentiert eine einzelne Beobachtung, wodurch die Stichprobengröße hinter jedem Kästchen sichtbar wird.
box_plot +
geom_boxplot() +
geom_dotplot(binaxis = 'y',
dotsize = 1,
stackdir = 'center') +
theme_classic()
Code Erläuterung
- geom_dotplot() zeichnet für jede Beobachtung einen Punkt, die innerhalb jedes Bins gestapelt sind.
- binaxis='y': Ändert die Position der Punkte entlang der y-Achse. Standardmäßig x-Achse
- dotsize=1: Größe der Punkte
- stackdir='center': Möglichkeit, die Punkte zu stapeln: Vier Werte:
- „oben“ (Standard),
- "Nieder"
- "Center"
- „centerganz“
Ausgang:
Kontrollieren Sie die Ästhetik des Box Grundfläche
Ändern Sie die Farbe der Box
Sie können die Farben der Gruppe ändern.
ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) + geom_boxplot() + theme_classic()
Code Erläuterung
- Die Farben der Gruppen werden in der aes()-Map gesteuert.pingSie können die Option `color=Month` verwenden, um die Farbe des Boxplots entsprechend den Monaten zu ändern.
Ausgang:
Box Grundstück mit mehreren Gruppen
Es ist auch möglich, mehrere Gruppen hinzuzufügen. Sie können den Unterschied in der Luftqualität je nach Messtag visualisieren.
ggplot(data_air_nona, aes(Month, Ozone)) + geom_boxplot(aes(fill = day_cat)) + theme_classic()
Code Erläuterung
- Die aes()-Karteping Das geometrische Objekt steuert die anzuzeigenden Gruppen (diese Variable muss ein Faktor sein).
- aes(fill= day_cat) ermöglicht das Erstellen von drei Feldern für jeden Monat auf der X-Achse
Ausgang:
Box Diagramm mit verwackelten Punkten
Eine weitere Möglichkeit, einzelne Beobachtungen darzustellen, besteht in der Verwendung von jitterförmigen Punkten. Jittering ist die übliche Wahl, wenn eine kategorische x-Achse dazu führt, dass viele Punkte auf derselben Position landen.
Diese Methode vermeidet die Überlappung.ping der diskreten Daten.
box_plot +
geom_boxplot() +
geom_jitter(shape = 15,
color = "steelblue",
position = position_jitter(width = 0.21)) +
theme_classic()
Code Erläuterung
- geom_jitter() fügt jedem Punkt eine kleine, zufällige Verschiebung hinzu, sodass sich die Punkte überlappen.ping Werte werden sichtbar.
- shape=15 ändert die Form der Punkte. 15 steht für die Quadrate
- color = „steelblue“: Ändere die Farbe des Punktes
- position = position_jitter(width = 0.21): Steuert die seitliche Verschiebung der Punkte, gemessen in Einheiten der x-Achse. Der Standardwert beträgt 40 Prozent des Abstands zwischen den Kategorien.
Ausgang:
Sie können den Unterschied zwischen dem ersten Diagramm mit der Jitter-Methode und dem zweiten mit der Punktmethode erkennen.
box_plot +
geom_boxplot() +
geom_point(shape = 5,
color = "steelblue") +
theme_classic()
Gekerbt Box Grundfläche
Ein interessantes Feature von geom_boxplot() ist eine Notch-Boxplot-Funktion in R. Das Notch-Plot verengt die Box um den Median. Der Hauptzweck eines Notch-Boxplots besteht darin, die Signifikanz des Medians zwischen Gruppen zu vergleichen. Es gibt starke Hinweise darauf, dass zwei Gruppen unterschiedliche Mediane haben, wenn sich die Notchs nicht überschneiden. Ein Notch wird wie folgt berechnet:
Hierbei ist IQR der Interquartilsabstand und n die Anzahl der Beobachtungen in der Gruppe. Die Kerbe umfasst annähernd das 95%-Konfidenzintervall des Medians.
box_plot +
geom_boxplot(notch = TRUE) +
theme_classic()
Code Erläuterung
- geom_boxplot(notch = TRUE): Zeichne den Boxplot mit Kerben um den Median.
Ausgang:
So fügen Sie Titel, Beschriftungen und benutzerdefinierte Farben zu einem Box Plot in R
Die obigen Diagramme verwenden die Standardeinstellungen von ggplot2, die Variablennamen direkt aus dem Datenrahmen übernehmen. Ein Diagramm, das veröffentlicht werden soll, benötigt lesbare Beschriftungen und eine durchdachte Farbpalette.
Titel und Achsenbeschriftungen. Ein einziger Aufruf von labs() setzt alle Textelemente:
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()
Sie wählen Ihre eigenen Farben. Verwenden Sie scale_fill_manual(), wenn fill innerhalb von aes() abgebildet wird, und scale_colour_manual(), wenn colour:
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")
Die Legende ist hier deaktiviert, da die x-Achse bereits jeden Monat benennt und eine Wiederholung daher Platzverschwendung wäre.
Die Kisten neu anordnen. Die Faktorstufen bestimmen die Reihenfolge auf der Achse. Da „Monat“ als geordneter Faktor erstellt wurde, ist die Reihenfolge bereits chronologisch. Bei einem ungeordneten Faktor sortieren Sie stattdessen nach dem Median.
ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) + geom_boxplot() + theme_classic()
Diagramm wird gespeichert. ggsave() speichert das letzte Diagramm in einer von Ihnen festgelegten Auflösung auf der Festplatte:
ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)
Box Plot in R: Code Literaturhinweis
Die folgende Tabelle listet den ggplot2-Aufruf für jede der oben beschriebenen Boxplot-Varianten auf:
| Ziel | Code |
|---|---|
| Einfaches Boxplot |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() |
| Ausrichtung umkehren |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip() |
| Gekerbtes Boxplot |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE) |
| Box Plot mit verwackelten Punkten |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21)) |
| Farbe nach Gruppe |
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot() |
| Mehrere Gruppen pro Kategorie |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2)) |
| Füge den Gruppenmittelwert hinzu. |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point") |
Überprüfen Sie auch: - R-Tutorial für Anfänger: Lernen Sie die Programmiersprache R












