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.

  • 📐 Fünf-Zahlen-Zusammenfassung: Die Box erstreckt sich vom ersten bis zum dritten Quartil, die Linie markiert den Median, und die Whisker reichen bis zum 1.5-Fachen des Interquartilsabstands.
  • 🧱 Basissyntax: ggplot(df, aes(x = group, y = value)) + geom_boxplot() erzeugt eine Box pro Ebene der Gruppe.ping Faktor.
  • ???? Outlier Styling: outlier.colour, outlier.shape und outlier.size steuern, wie Punkte jenseits der Whisker gezeichnet werden.
  • 💠 Anzeige der Beobachtungen: geom_jitter() verschiebt Überlappungping Die Zeiger zeigen zur Seite und geben so die Stichprobengröße hinter jedem Kästchen preis.
  • 📉 Gekerbt Boxist: notch = TRUE zeichnet das Konfidenzintervall des Medians und verhindert Überlappungen.ping Kerben deuten auf einen tatsächlichen Unterschied hin.
  • ???? Grouping: Karteping Die Funktion `fill` innerhalb von `geom_boxplot()` teilt jede Kategorie in mehrere nebeneinanderliegende Boxen auf.

BoxDiagramm in R

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:

Plug-and-Play-Betrieb Box Grundfläche

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:

Seite des Diagramms wechseln

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:

Farbe des Ausreißers ändern

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:

Fügen Sie eine zusammenfassende Statistik hinzu

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:

Box Plot mit Punkten

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:

Ändern Sie die Farbe des Box

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 Plot mit mehreren Gruppen

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:

Box Diagramm mit verwackelten Punkten

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()

Box Diagramm mit verwackelten Punkten

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:

Gekerbt Box Grundfläche

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:

Gekerbt Box Grundfläche

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

Häufig gestellte Fragen

Die Whisker reichen bis zum extremsten Messwert, der innerhalb des 1.5-fachen Interquartilsabstands des nächstgelegenen Quartils liegt. Sie stellen nicht das Minimum und Maximum dar, und alles darüber hinaus wird als Ausreißer gezeichnet.

Nicht automatisch. Die 1.5-IQR-Regel ist eine Konvention, kein Beweis für einen Fehler. Untersuchen Sie jeden einzelnen Punkt: Verzerrte Daten, wie beispielsweise Ozonmesswerte, erzeugen naturgemäß hohe Werte, die jedoch korrekte Messwerte darstellen.

Überlappungping Die Einkerbungen deuten darauf hin, dass es keine starken Beweise dafür gibt, dass sich die beiden Mediane unterscheiden. Keine Überlappung.ping Kerben deuten auf einen wahrscheinlichen realen Unterschied hin, was in etwa einem Vergleich mit 95-prozentiger Konfidenz entspricht.

Box Plots sind ein standardmäßiger explorativer Schritt vor dem Training: Sie decken Schiefe, Ausreißer und unterschiedliche Merkmalsskalen zwischen den Klassen auf. Teams verwenden sie auch, um die Modellgenauigkeit in den verschiedenen Kreuzvalidierungsdurchgängen zu vergleichen.

Ja. KI-Assistenten können Fehler wie beispielsweise eine kontinuierliche x-Achse, die ein einzelnes Rechteck erzeugt, erklären und die richtige aes()-Karte vorschlagen.pingund kennzeichnen Sie veraltete Argumente wie fun.y. Führen Sie den korrigierten Code immer mit Ihren eigenen Daten erneut aus.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: