Wie erstelle ich Histogramme, Boxplots und Violinenplots in R?

Wie erstelle ich Histogramme, Boxplots und Violinenplots in R?

Dieser Blogpost begleitet unsere Folge dl036: graphentypen 2 – histogramme, boxplots, etc. In unserer Reihe zu Graphentypen geht es um verschiedene Daten und welche Arten der Darstellung es für diese gibt. Im ersten Teil (dl029: graphentypen – skalen und zeiger) ging es um die kleinste Einheit: um eindimensionalen Daten. Im zweiten Teil wird es ein bisschen komplexer. Wir reden über Graphentypen, mit denen sich eindimensionale Verteilungen abbilden lassen. Es geht um Histogramme, Boxplots, Violinenplots und kumulierte Häufigkeiten. Hierfür hat Helena Plotbeispiele erstellt, die wir in der Folge besprechen. Hier haben wir einmal alle Plots mit dem dazugehören Code für R zusammengeführt.

Für die Plotbeispiele wird ggplot2 genutzt, um in R Histogramme, Boxplots, Violinenplots und kumulierte Häufigkeiten zu plotten. ggplot2 kann mit dem großen Paket tidyverse oder einzeln installiert werden. ggthemes wird ebenfalls benutzt und dient dazu, die Farbauswahl der Plots so anzupassen, sodass sie auch für verschieden Formen von Farbenblindheit noch gut erkennbar sind.
Als Beispieldatensatz wird der frei verfügbare Datensatz palmerpenguins verwendet, der auch auf GitHub heruntergeladen werden kann.

Quellen:

Mit install.packages lassen sich die Pakete in R installieren:

install.packages("palmerpenguins")
install.packages("ggplot2")
install.packages("ggthemes")

Um die Pakete für die Anwendung zu nutzen, werden sie dann mit library() geladen:

library(palmerpenguins)
library(ggplot2)
library(ggthemes)

Histogramme

Um ein Histogramm zu plotten, wird zuerst mit ggplot(penguins) der Datensatz ausgewählt, der geplottet werden soll. Dann wird mit geom_histogram() festgelegt, dass es ein Histogram werden soll. Mit aes() Funktion (aes steht für aesthetics) lassen sich die Achsen und andere Aspekte des Plots festlegen, die auf den Daten basieren.

ggplot(penguins) + geom_histogram(aes(flipper_length_mm))

Die Anzahl der Balken (bins) lässt sich auch manuell einstellen in der geom_histogram()-Funktion.

Bei 5 Bins sieht der Plot schon recht anders aus.

ggplot(penguins) + geom_histogram(aes(flipper_length_mm), bins = 5)

Es gibt die Möglichkeit, mehrere Histogramme für verschieden Kategorien untereinander zu plotten. Dazu gibt es in ggplot sogenannte Facets. Mit facet_grid(species~.) lassen sich die Histogramme untereinander plotten:

ggplot(penguins) + 
  geom_histogram(aes(flipper_length_mm)) +
  facet_grid(species~.)

Alternativ lässt sich die Spezies auch über Farben darstellen. color wäre dabei aber die Umrandung der Balken, um die Balkenfarbe festzulegen, muss fill (für Füllung) verwendet werden. Mit position=‘stack' wird festgelegt, dass die Balken aufeinander gelegt werden sollen.

ggplot(penguins) + geom_histogram(aes(flipper_length_mm,fill=species), position='stack')

Boxplots

Boxplots lassen sich in ggplot mittels geom_boxplot() erstellen. Bei der Achsenauswahl lässt sich über y festlegen, dass der Boxplot vertikal sein soll. Würde x genommen werden, wäre der Boxplot horizontal.

Mit theme(axis.text.x = element_blank()) werden die Werte auf der x-Achse ausgeschaltet, da diese bei einem einzelnen Boxplot keine Bedeutung haben und eher verwirren als nützen.

ggplot(penguins) + geom_boxplot(aes(y=flipper_length_mm)) + theme(axis.text.x = element_blank())

Ein Vergleich zwischen den Spezies lässt sich auch darüber machen, dass die Spezies auf der x-Achse dargestellt werden sollen. Es ist aber auch nötig die Daten nach Spezies zu gruppieren, darum steht dort group=species:

ggplot(penguins) +
  geom_boxplot(
    aes(
      x=species,
      y=flipper_length_mm, 
      group=species,
      fill=species
    )
) + scale_fill_colorblind()

scale_fill_colorblind() kommt aus dem ggthemes-Paket, und passt die Farbauswahl so an, dass sie auch für verschieden Formen von Farbenblindheit noch gut erkennbar sind.

Violinenplots

Violinenplots lassen sich einfach über geom_violin() plotten, was im Grunde so verwendet werden kann wie der Boxplot. Wenn draw_quantiles=c(0.25,0.5,0.75) gesetzt ist, werden Linien eingezeichnet die der Box und der Mittellinie im Boxplot entspricht.

ggplot(penguins) +
  geom_violin(
    aes(
      x=species,
      y=flipper_length_mm, 
      group=species,
      fill=species
    ),
    draw_quantiles = c(0.25,0.5,0.75)
) + scale_fill_colorblind()

Kumulierte Häufigkeiten

Bei einer kumulierten Häufigkeit werden die Daten erst sortiert, und dann geschaut wie oft jeder einzelne Wert auftaucht. Das ganze wird dann noch normiert, also durch die Gesamtzahl der Datenpunkt geteilt, damit die Werte am Ende zwischen 0 und 1 liegen. Damit startet der Plot immer unten links und geht bis oben rechts. Das ganze lässt sich mit stat_ecdf() machen. Das ist diesmal kein geom_, da es in erster Linie eine statistische Auswertungsfunktion ist. Daher werden die aesthetics vorher gesetzt. Da hier nur eine Linie geplottet wird, wird die Farbe der verschiedenen Gruppen mit colour gesetzt und auch gruppiert.

ggplot(penguins) +
  aes(
    x=flipper_length_mm,
    colour=species
  ) +
  stat_ecdf() + scale_color_colorblind()

Bei gleichverteilten Größen ist es eine Gerade:

ggplot(data.frame(x=runif(10000))) +
  aes(x) +
  stat_ecdf()

Bei normalverteilten Größen nicht, sondern eher die klassische S-Form:

ggplot(data.frame(x=rnorm(10000))) +
  aes(x) +
  stat_ecdf()

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert