Grafiken erstellen mit ggplot

Einführung in das ggplot2-Package.
Hands-on: Vorbereitung
  • Laden Sie hier den Beispielsdatensatz herunter, speichern Sie diesen in einem data-Folder in einem R-Project.

  • Öffnen Sie ein neues RScript (.R) oder RMarkdown-File (.Rmd). In einem RMarkdown-File können Code und Text verbunden werden und die die Outputs des Codes (z.B. Grafiken) werden anzeigt.

Grafiken erstellen mit ggplot

Das gg im Package ggplot2 steht für Grammar of Graphics. Diese besagt, dass alle Grafiken aus den unten beschriebenen Komponenten zusammengesetzt werden können und sich damit vollständig beschreiben lassen. Das Kennen dieser Komponenten macht den anfangs oft etwas unintuitiven Aufbau von ggplot verständlicher.

Eine Grafik enthält mindestens folgende 3 Komponenten:

  • Daten

  • Geome, also sichtbare Formen (aesthetics), z.B. Punkte, Linien oder Boxen.

  • Koordinatensystem/Mapping: wie sind Daten und Geome verbunden?

Weitere optionale Komponenten sind:

  • Statistische Parameter

  • Position

  • Koordinatenfunktionen

  • Facets

  • Scales

  • Themes

In dieser Einführung wird auf die ersten drei Komponenten, sowie auf Facets und Themes eingegangen.

Beim Laden des Packages tidyverse wird automatisch das _Package ggplot2 ebenfalls geladen.

Daten

Die wichtigste Komponente einer Grafik sind die Daten. Bevor eine Grafik erstellt wird, müssen die Eigenschaften des Datensatzes bekannt sein.

# Einlesen des Übungsdatensatzes
d <- read.csv("data/DatasaurusDozen.csv") %>%
    mutate(condition = as.factor(condition)) # Variable condition soll ein Faktor sein

# Datensatz anschauen
glimpse(d)
Rows: 1,846
Columns: 3
$ condition <fct> away, away, away, away, away, away, away, away, away, away, …
$ value1    <dbl> 32.33111, 53.42146, 63.92020, 70.28951, 34.11883, 67.67072, …
$ value2    <dbl> 61.411101, 26.186880, 30.832194, 82.533649, 45.734551, 37.11…

Datenformat

Am einfachsten ist das plotten mit ggplot(), wenn die Daten im long-Format vorliegen. Das bedeutet:

  • Jede Variable die gemessen/erhoben wird hat eine Spalte (z.B. Versuchspersonennummer, Reaktionszeit, Taste).

  • Jede Messung hat eine Zeile. In unserem PsychoPy-Experiment entspricht dies einer Zeile pro Trial.

Die hier eingelesenen Daten sind schon im long-Format.

Variablen

Für die Grafik ist es relevant, welches Skalenniveau die zu visualisierenden Variablen haben. Je nach Anzahl Variablen und den entsprechenden Skalenniveaus eignen sich andere Grafik-Formen.

CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=724035
Hands-on: Datensatz anschauen

Schauen Sie sich den Datensatz an.

  • Wie viele unterschiedliche Variablen gibt es?
  • Wie heissen die Variablen?
  • Welches Skalenniveau haben sie?

Subsetting

Wenn nur ein gewisser Teil der Daten visualisiert werden soll, muss der Datensatz gefiltert werden. Der aktuelle Datensatz enthält beispielsweise verschiedene Bedingungen, jeweils mit Werten für Variable value1 und value2. Folgende 13 Bedingungen sind enthalten:

unique(d$condition)
 [1] away       bullseye   circle     dino       dots       h_lines   
 [7] high_lines slant_down slant_up   star       v_lines    wide_lines
[13] x_shape   
13 Levels: away bullseye circle dino dots h_lines high_lines ... x_shape

Fürs erste entscheiden wir uns für die Bedingung away.

d_away <- d %>%
    filter(condition == "away")

Wir können für diese Bedingung zusätzlich summary statistics berechnen, hier Mittelwert und Standardabweichung.

d_away_summary <- d_away %>%
    summarise(mean_v1 = mean(value1),
              sd_v1 = sd(value1),
              mean_v2 = mean(value2),
              sd_v2 = sd(value2))

glimpse(d_away_summary)
Rows: 1
Columns: 4
$ mean_v1 <dbl> 54.2661
$ sd_v1   <dbl> 16.76982
$ mean_v2 <dbl> 47.83472
$ sd_v2   <dbl> 26.93974

Diese Werte geben einen Anhaltspunkt, in welchem Bereich sich die Werte bewegen werden.

Plot

In den folgenden Beispielen werden die Daten der Bedingung away verwendet. Als erstes Argument wird der Funktion ggplot() der Datensatz übergeben (data = data_away).

ggplot(data = d_away)

Mapping

Das mapping beschreibt, welche Variable auf der x- und y-Achse abgetragen werden sollen. Es wird also definiert, wie die Variablen auf die Formen (aesthetics) gemappt werden sollen. Am einfachsten wir dies zu Beginn in festgelegt (das mapping kann aber auch in der Funktion geom_ selbst definiert werden). Weitere Variablen könnten als group = ... oder color = ... eingefügt werden.

ggplot(data = d_away,
       mapping = aes(x = value1,
                     y = value2)) 

Die Grafik verfügt nun über Achsen, diese werden automatisch mit den Variablennamen beschriftet. Da noch keine Formen (geoms) hinzugefügt wurde ist die Grafik aber leer.

Geom / Formen

Als dritte Komponente werden in ggplot() wird die Form mit geom_ hinzugefügt. Jede Form, die eingefügt wird benötigt Angaben zum mapping, falls kein mapping angegeben wird, wird dieses aus der ggplot()-Funktion in der ersten Zeile übernommen.

Es gibt viele verschiedene Formen zur Auswahl. Beispielsweise werden mit geom_point() Punkte erstellt, mit geom_line() Linien, mit geom_boxplot Boxplots, usw. Bei der Wahl der passenden Form kommt es einerseits auf die Daten an. Sind die Daten z.B. Faktoren oder numerische Werte (siehe auch Skalenniveau oben)? Wie viele Variablen werden gleichzeitig in die Grafik eingebunden? Andererseits ist es wichtig, was mit der Grafik gezeigt werden soll: Unterschiede? Gemeinsamkeiten? Veränderungen über Zeit?

Geome zur Visualisierung von Datenpunkten und Verläufen:

Geome zur Visualisierung von zusammenfassenden Werten:

Hands-on: Geoms

Welche geoms eignen sich für welches Skalenniveau und welche Variablenanzahl?

👉 Hier finden Sie das ggplot-Cheatsheet.

Schauen Sie sich die verschiedenen Formen von Plots hier an.

Kombinieren von mehreren geoms in einer Grafik

Teilweise werden in Visualisierungen mehrere geoms kombiniert. In vielen Fällen macht es beispielsweise Sinn, nicht nur die tatsächlichen Werte, sondern in derselben Grafik auch zusammenfassende Masse zu visualisieren.

Verwenden verschiedener geoms in einem Plot:

ggplot(data = d_away, 
       mapping = aes(x = condition,
                     y = value2)) +
    geom_boxplot(width = 0.3) +
    geom_jitter(width = 0.1) 

Kombiniert werden können aber nicht nur verschiedene Formen, sondern auch mehrere Datensätze. Dies kann in ggplot() einfach umgesetzt werden indem mehrere Geoms übereinandergelegt werden und nicht das mapping aus der ggplot()-Funktion genutzt wird, sondern indem für jedes geom ein separater Datensatz und ein separates mapping spezifiziert werden.

ggplot(data = d_away, 
       mapping = aes(x = condition,
                     y = value2)) +
    geom_jitter(width = 0.1) + # verwendet Datensatz "d_away"
    geom_point(data = d_away_summary, # verwendet Datensatz "d_away_summary"
               aes(x = "away", y = mean_v1), # condition ist nicht im Datensatz enthalten, deshalb hier hardcoded
               color = "red", # Punkt rot einfärben
               size = 3) # Punkt vergrössern

Beschriftungen und Themes

Schönere und informativere Plots lassen sich gestalten, wenn wir einen Titel hinzufügen, die Achsenbeschriftung anpassen und das theme verändern:

ggplot(data = d_away,
       mapping = aes(x = value1,
                     y = value2)) +
    geom_point() +
    labs(title = "Ein etwas schönerer Plot", 
         subtitle = "Verteilung der Rohwerte",
        x = "Wert 1  [a.u.]",
        y = "Wert 2 [a.u.]") +
    theme_minimal()

Hands-on

Erstellen Sie eine Grafik. Fügen Sie mit labs() passende Beschriftungen hinzu. Gibt es noch weitere, oben nicht verwendete Optionen?

Daten plotten: Hands on

Im Folgenden können Sie den Datensatz mit Grafiken erkunden. Sie können entweder in Ihrem RScript/RMarkdown-File weiterarbeiten oder Sie können ein GUI (graphical user interface) verwenden, dass für Sie den Code schreibt.

Tipp: GUI

Um das GUI zu verwenden, gehen Sie wie folgt vor:

  • Installieren Sie das package esquisse mit install.packages("esquisse") in Ihrer Konsole oder über Tools > Install packages...

  • Geben Sie in Ihrer Konsole esquisse::esquisser() ein und wählen Sie dann unter Import Data den schon eingelesenen Datensatz DatasaurusDozen.csv aus.

Hands-on: Informative Grafik erstellen
  • Welche geom_s/Formen eignen sich gut für diesen Datensatz?

  • Welche Abbildungen können alle 3 Variablen des Datensatzes berücksichtigen?

  • Wie kann man Bedingungen miteinander vergleichen?

  • Wie können Grösse und Farbe der geom_s bestimmt werden?

  • Wie passt man Schriftgrössen an?

  • Können Sie eine Grafik speichern?

  • Lassen Sie sich den Code direkt ins RScript/RMarkdown-File einfügen und verändern Sie den Code dort weiter.

Tipps und Tricks

Mehrere Plots in einer Grafik darstellen

Dies können Sie mit dem Package patchwork sehr einfach machen. Sie finden oben oder hier ein Beispiel.

Grafik abspeichern

Eine Grafik lässt sich abspeichern unter dem Reiter Plots > Export oder mit der Funktion ggsave().

Inspiration

Weiterführende Ressourcen zur Datenvisualisierung mit ggplot()

Reuse

Citation

BibTeX citation:
@online{wyssen,
  author = {Wyssen, Gerda and Fitze, Daniel},
  title = {Grafiken Erstellen Mit `Ggplot`},
  url = {https://kogpsy.github.io/neuroscicomplabFS24//pages/chapters/data_visualization_1.html},
  langid = {en}
}
For attribution, please cite this work as:
Wyssen, Gerda, and Daniel Fitze. n.d. “Grafiken Erstellen Mit `Ggplot`.” https://kogpsy.github.io/neuroscicomplabFS24//pages/chapters/data_visualization_1.html.