Grafiken erstellen mit ggplot

Wissenschaftliche Daten sichtbar machen.
Published

April 3, 2023

Lernziele

Erstellen eines (reproduzierbaren) Data Reports mit Datenvisualisierungen zu unserem Experiment.

  • das Erstellen von R Markdown Files
  • das Verwenden des ggplot2-packages
Hands-on

Wir arbeiten heute in einem R-Markdown-File. So können wir Code und normalen Text verbinden, auch die Outputs des Codes (unsere Grafiken) werden anzeigt. Auf diese Weise erstellen wir reproduzierbare Grafiken.

  • Öffnen Sie das RStudio-Project dataviz. Falls Sie diesen noch nicht heruntergeladen haben, laden Sie hier den Projektordner herunter und entzippen Sie diesen.

  • Öffnen Sie unter File > New File > R Markdown ... ein neues RMarkdown-File.

  • Geben Sie einen Titel und Ihren Namen ein und wählen Sie HTMLals Output-Format

  • Speichern Sie dass Dokument unter dem Namen data_viz_exampleab.

Grafiken erstellen mit ggplot

Wir werden das package ggplot2in Rverwenden. ggsteht hierbei für Grammar of Graphics. Der anfangs oft etwas unintuitive Aufbauvon ggplot lässt sich vereinfachen, wenn man berücksichtigt, dass Grafiken aus den unten beschriebenen Bauteilen zusammengesetzt werden und sich damit vollständig beschreiben lassen.

Daten visualisieren erfordert:

  • Daten

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

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

Weitere optionale Parameter sind:

  • Statistische Parameter

  • Position

  • Koordinatenfunktionen

  • Facets

  • Scales

  • Themes

Wir werden uns heute vor allem mit den Daten, Geomen und Mappings befassen. Zudem werden wir vor allem Facets und Themes genauer anschauen.

Daten

Zuerst laden wir das tidyverse Package und lesen das im Ordner data_example gespeicherte .csv File ein und machen die Variable condition zu einem Faktor. Wir schauen uns die Daten mit glimpse() an. Passen Sie hierzu den Datei-Pfad an Ihren Ordner an.

library(tidyverse)

data <- read.csv("data_example/DatasaurusDozen.csv") %>%
    mutate(condition = as.factor(condition))

glimpse(data)
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, 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

Bevor wir weiterfahren, müssen wir wissen, welche Variablen wir plotten möchten und welches Skalenniveau diese 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

Schauen Sie sich den Datensatz an.

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

Subsetting

Manchmal möchte man nur einen Teil der Daten plotten. Der aktuelle Datensatz enthält beispielsweise verschiedene Bedingungen, jeweils mit Werten für Variable value1 und value2. Folgende 13 Bedingungen sind enthalten:

unique(data$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.

data_away <- data %>%
    filter(condition == "away")

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

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

glimpse(data_away_summary)
Rows: 1
Columns: 4
$ mean_v1 <dbl> 54.2657
$ sd_v1   <dbl> 16.713
$ mean_v2 <dbl> 47.8351
$ sd_v2   <dbl> 26.84777

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

Plot

In den folgenden Beispielen verwenden wir die Daten der Bedingung away. Wir geben in die Funktion ggplot als erstes Argument data = data_away ein.

ggplot(data = data_away)

Wir haben nun die Daten eingegeben, aber noch keine Formen und kein Mapping, deshalb ist die Grafik leer.

Geom / Formen

In ggplot wird die Form mit geom_ hinzugefügt. 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 nominal, ordinal, interval oder ratio skaliert? Wie viele Variablen werden gleichzeitig in die Grafik einbezogen? Andererseits ist es wichtig, was mit der Grafik gezeigt werden soll: Unterschiede? Gemeinsamkeiten? Veränderungen über Zeit?

Oft verwendete Formen sind:

Oder wenn zusammenfassende Werte geplottet werden sollen:

Hands-on

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.

Wenn wir nun aber

ggplot(data = data_away) +
    geom_point()

ausführen würden, ergäbe das eine Fehlermeldung. Wir haben nämlich nicht angegeben, wie die Daten mit geom verbunden werden soll: Das mapping fehlt.

Mapping

Jede geom-Funktion in ggplot benötigt Angaben zum mapping. Damit wird definiert, wie die Variablen auf die Formen (aesthetics) gemappt werden sollen. Am einfachsten geht das, wenn wir dies zu Beginn festlegen (wir könnten es auch in der Funktion geom_ eingeben). Wir geben ein welche Variable auf der x-Achse und auf der y-Achse abgetragen werden soll. Eine weitere Variable könnten wir hier als group = ... oder color = ... einfügen.

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

Jetzt können wir das geom hinzufügen:

ggplot(data = data_away,
       mapping = aes(x = value1,
                     y = value2)) +
    geom_point()

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 = data_away,
       mapping = aes(x = value1,
                     y = value2)) +
    geom_point() +
    ggtitle ("Ein etwas schönerer Plot") +
    xlab("Wert 1 [a.u.]") +
    ylab("Wert 2 [a.u.]") +
    theme_minimal()

Daten plotten: Hands on

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

GUI

Falls Sie ein GUI verwenden möchten, 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 Datensatz DatasaurusDozen.csv aus

Hands-on
  • 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 Geome bestimmt werden?

  • Wie passt man Schriftgrössen an?

  • Können Sie eine Grafik speichern?

Erstellen Sie eine möglichst informative Grafik. Kopieren Sie den Code in das R Markdown File. Dieser Code dient Ihnen nächste Woche evtl. als gute Vorlage.

Weitere hilfreiche Informationen

References

Matejka, Justin, and George Fitzmaurice. 2017. “Same Stats, Different Graphs: Generating Datasets with Varied Appearance and Identical Statistics Through Simulated Annealing.” In Proceedings of the 2017 CHI Conference on Human Factors in Computing Systems, 1290–94. Denver Colorado USA: ACM. https://doi.org/10.1145/3025453.3025912.

Reuse

Citation

BibTeX citation:
@online{wyssen2023,
  author = {Gerda Wyssen},
  title = {Grafiken Erstellen Mit `Ggplot`},
  date = {2023-04-03},
  url = {https://kogpsy.github.io/neuroscicomplabFS23//data_visualization_1.html},
  langid = {en}
}
For attribution, please cite this work as:
Gerda Wyssen. 2023. “Grafiken Erstellen Mit `Ggplot`.” April 3, 2023. https://kogpsy.github.io/neuroscicomplabFS23//data_visualization_1.html.