Datenvisualisierung mit R

Data Science 1 - Programmieren & Visualisieren

Saskia Otto

Universität Hamburg, IMF

Wintersemester 2022/2023

2 verbreitete Typen

Grafiken mit base R

  • Funktionen sind bereits Bestandteil der Basisversion.
  • Gut geeignet für eine einfache und schnelle Datenexploration.
  • Nicht sehr intuitiv und weniger geeignet für komplexe Grafiken.
  • Keine gute Hilfe bzw. Dokumentation.

Grafiken mit ggplot2 Paket

  • Besser geeignet bei komplexeren Grafiken.
  • Klarere Syntax.
  • Besser dokumentiert.
  • Viele Beispiele im Internet.

Grafiken mit base R

2 Funktionstypen

High-level Funktionen

Erstellen vollständige Diagramme.

plot(x = iris$Sepal.Length, 
  y = iris$Sepal.Width)

Low-level Funktionen

Fügen weitere Elemente in den aktuellen Plot.

plot(x = iris$Sepal.Length, 
  y = iris$Sepal.Width)
abline(h = 3, lwd = 5, col = "blue") 

High-level Funktionen | Überblick

Funktion Beschreibung
plot() Generische Funktion mit vielen Methoden (kontextabhängig)
barplot() Säulen- bzw. Balkendiagram
boxplot() Boxplot
contour() Plot mit Höhenlinien
coplot() sog. ‘conditional plot’
curve() Kurven über einem Intervall für eine Funktion
hist() Histogramm
image() Erstellt kontextabhängige ‘Bildraster’ (auch in 3D)
mosaicplot() Mosaikplot für kategorielle Daten
pairs() Streudiagramm-Matrix für paarweise Gegenüberstellungen
pie() Tortendiagramm
qqplot() QQ-Plot

High-level Funktionen | Beispiele

High-level Funktionen | Dokumentation

  • Können über ihre Argumente modiziert und angepasst werden.
  • In den Hilfen von ?plot und ?plot.default werden viele Argumente von Grafikfunktionen genannt und erklärt.
  • Es gibt jedoch auch globale Einstellungen für Grafiken, die alle nachfolgenden Grafiken verändern können: par().
  • Die Hilfe von ?par listet wesentlich mehr Argumente, die auch in den high-level Funktionen genutzt werden können.

High-level Funktionen | Argumente

Argument Beschreibung
adj Ausrichtung von Text (zentriert,…)
axes Achsen sollen (nicht) eingezeichnet werden
bg Hintergrundfarbe der Grafik
bty Art der Box um die gezeichnete Grafik
cex Größe der Schriftzeichen in der Grafik
col Farben (der Linien, der Punkte, etc.)
las Ausrichtung der Achsenbeschriftung
lty,lwd Linientyp (gestrichelt,…) und Linienbreite
main,sub Überschrift und Unterschrift
mfrow mehrere Grafiken in einem Bild
pch Darstellung eines Punktes
type Typ der Darstellung (Linien, Punkte, Nichts)
xlab,ylab x-/y-Achsenbeschriftung
xlim,ylim Größe der Grafik in x-/y-Richtung

High-level Argumente | Demonstration 1

plot(
  x = 1:10,
  y = c(5,9,3,1,14,2,3,6,13,10)
)

High-level Argumente | Demonstration 2

plot(
  x = 1:10,
  y = c(5,9,3,1,14,2,3,6,13,10),
  type = "b" # =both (line + point)
)

High-level Argumente | Demonstration 3

plot(
  x = 1:10,
  y = c(5,9,3,1,14,2,3,6,13,10),
  type = "b", # =both (line + point)
  pch = 20,
  cex = 6,
  col = "red"
)

High-level Argumente | Demonstration 4

plot(
  x = 1:10,
  y = c(5,9,3,1,14,2,3,6,13,10),
  type = "b", # =both (line + point)
  pch = 20,
  cex = 6,
  col = "red",
  xlab = "X", ylab = "Y",
  main = "Grafiküberschrift"
)

Wichtige low-level Grafikfunktionen

Funktion Beschreibung
abline() Zeichnet eine kontextabhängige Linie
arrows() Zeichnet Pfeile
axis() Zeichnet Achsen (jede Achse einzeln!)
grid() Zeichnet ein Gitternetz
legend() Erstellt eine Legende im Plot
lines() Zeichnet schrittweise Linien
mtext() Schreibt Text in den Rand (s.unten)
points() Zeichnet Punkte
polygon() Zeichnet ausgefüllte Polygone
rect() Zeichnet (vektorwertig) ein Rechteck
segments() Zeichnet (vektorwertig) Linien
text() Schreibt Text in den Plot
title() Beschriftet den Plot

Wo soll die Grafik erscheinen?

Die sog. ‘graphics devices’


Screen device (default) - Fenster im Programm

File device - Ausgabeformat als Rasterdatei (JPEG, PNG, TIFF,..) oder Vektordatei (PDF, EPS)

Ausgabeformate und ihre Funktionen

Ausgabeformate | Demonstration

Screen device
plot(1:10)

→ Die Ausgabe erscheint standardmäßig auf dem Bildschirm

Ausgabe als PDF-Datei
pdf('Grafik1.pdf') # Device wird gestartet
plot(1:10) # Grafik wird erstellt
points(0.5:9.5, col=1:10, pch=1:10) # Erweiterungen
#... weitere Erweiterungen an der Grafik
dev.off() # Device muss geschlossen werden

Wichtig

Das Schließen mit dev.off() ist besonders wichtig, sonst werden alle folgenden Grafiken mit in dem PDF gespeichert und nicht in der Konsole angezeigt!

Visualisierung mit ‘ggplot2’

Ein System für kreative Grafiken

Gallerie der ggplot2 Erweiterungen

Umsetzung des visual encoding in ggplot2

Die 8 Ebenen in ggplot2

Eine Demonstration mit dem internen Datensatz ‘iris’

Iris setosa Iris versicolor Iris virginica

Fotos von Radomil Binek, Danielle Langlois, und Frank Mayfield (von links nach rechts); Zugriff über Wikipedia(unter CC-BY-SA 3.0 Lizenz).

Ebene 1 - Data

Grafik starten mit ggplot()

ggplot(data = iris)

Ebene 2 - Aesthetic mapping | 1

Globale Variablenzuordnung von x und y

ggplot(data = iris) +
  aes(
    x = Sepal.Length, 
    y = Petal.Length)

Noch besser innerhalb der ggplot Funktion:

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length)
  )

Ebene 3 - Geometries | 1

Punkte-Geometrie hinzufügen

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length)
  ) +
  geom_point()

Ebene 3 - Geometries | 2

Die Punktfarbe einheitlich anpassen

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length)
  ) +
  geom_point(colour = "green")

Ebene 2 - Aesthetic mapping | 2

Variablen-spezifische Farbwahl (lokal)

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length)
  ) +
  geom_point(aes(colour = Species))

Ebene 2 - Aesthetic mapping | 3

Falsch: Einheitliche Farbwahl ‘mappen’

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length)
  ) +
  geom_point(aes(colour = "green"))

Ebene 3 - Geometries | 3

Weitere Geometrie hinzufügen: geglättete Kurve

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length)
  ) +
  geom_point(aes(colour = Species)) +
  geom_smooth()

Ebene 3 - Geometries | 4

Weitere Geometrie hinzufügen: Trendlinie

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length)
  ) +
  geom_point(aes(colour = Species)) +
  geom_smooth(method = "lm")

Ebene 2 - Aesthetic mapping | 4

Art-spezifische Trendlinien über die Farbe (lokal)

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length)
  ) +
  geom_point(aes(colour = Species)) +
  geom_smooth(aes(colour = Species), 
    method = "lm")

Ebene 2 - Aesthetic mapping

Globale Farbwahl (für alle Geometrien)

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length,
    colour = Species)
  ) +
  geom_point() +
  geom_smooth(method = "lm")

Ebene 4 - Scales

Farbskala anpassen

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length,
    colour = Species)
  ) +
  geom_point() +
  geom_smooth(method = "lm") +
  scale_colour_manual(values = 
    c("orange","cyan3", "#68228B")) 

Ebene 5 - Facets

Datenpunkte aufteilen

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length,
    colour = Species)
  ) +
  geom_point() +
  geom_smooth(method = "lm") +
  scale_colour_manual(values = 
    c("orange","cyan3", "#68228B")) +
  facet_wrap(~Species, nrow = 2)

Ebene 6 - Coordinates

Das Koordinatensystem bspw. drehen

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length,
    colour = Species)
  ) +
  geom_point() +
  geom_smooth(method = "lm") +
  scale_colour_manual(values = 
    c("orange","cyan3", "#68228B")) +
  facet_wrap(~Species, nrow = 2) +
  coord_flip()

Ebene 7 - Guides

Legende und Achsenbeschriftung anpassen

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length,
    colour = Species)
  ) +
  geom_point() +
  geom_smooth(method = "lm") +
  scale_colour_manual(values = 
    c("orange","cyan3", "#68228B")) +
  facet_wrap(~Species, nrow = 2) +
  coord_flip() +
  guides(colour = guide_none()) +
  labs(x = "Länge Kelchblatt (cm)",
    y = "Länge Kronblatt (cm)")

Ebene 8 - Theme

Ändern des Layouts (der Nicht-Datenelemente)

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length,
    colour = Species)
  ) +
  geom_point() +
  geom_smooth(method = "lm") +
  scale_colour_manual(values = 
    c("orange","cyan3", "#68228B")) +
  facet_wrap(~Species, nrow = 2) +
  coord_flip() +
  guides(colour = guide_none()) +
  labs(x = "Länge Kelchblatt (cm)",
    y = "Länge Kronblatt (cm)") +
  theme_dark()

Zum Abschluss: speichere die Grafik

Mit ggsave()

ggplot(
  data = iris,
  mapping = aes(
    x = Sepal.Length, 
    y = Petal.Length,
    colour = Species)
  ) +
  geom_point() +
  geom_smooth(method = "lm") +
  ...

ggsave("Iris_length_relationships.pdf", width = 4, height = 4)

Das letzte angezeigte Diagramm (im ‘screen device’) wird als PDF in 4x4 inch gespeichert (auch Standardeinstellung).

Zusammenfassung der einzelnen Ebenen

1. Daten

Starte mit dieser Funktion und übergebe einen Datensatz an die Funktion: ggplot(data)

2. Aesthetic mapping

Als nächstes müssen die Datenvariablen den Koordinaten zugeordnet werden damit ein leeres Koordinatensystem dargestellt wird. Dies geschieht in der aes() Funktion. Weitere visuelle Eigenschaften (sog. aesthetics) sind z.B. Größe, Farbe, Form, etc.

  • Zuordnung alleinstehend oder innerhalb von ggplot() gilt für alle Ebenen.
  • Zuordnung in geom_XXX() Funktion gilt nur für diese Ebene.

3. Geometrien

geom_XXX(): Kombiniere ein geometrisches Objekt/Grundelement, welches die Daten repräsentiert, mit den Abbildungseigenschaften, einer Statistik und einer Positionsanpassung, z.B. geom_point() oder geom_col().

4. ‘Scales’

Sog. ‘scale’ Funktionen bestimmen wie Datenwerte in visuelle Eigenschaften übersetzt werden (überschreiben die Standardeinstellungen), wie z.B.scale_fill_manual().

5. ‘Faceting’

facet_XXX() Funktionen erstellen kleinere Diagramme, die verschiedene Teilmengen der Daten anzeigen; nützlich zur Untersuchung von Interaktionen mit kategorialen Variablen.

6. Koordinatensystem

Funktionen wie coord_flip() bestimmen die Darstellung des XY-Koordinatensystems und somit die Positionierung der Daten.

7. ‘Guides’

Mit der guides() Funktion und weiteren guide_XXX() Helferfunktionen kann die Anzeige der Achsen und Legende bestimmt werden.

8. ‘Themes’

Sog. ‘theme’ Funktionen bestimmen die Anzeige aller Nicht-Datenelemente des Plots. Es können alle Einstellungen mit einem kompletten Thema wie theme_classic() überschrieben oder einzelne Einstellungen mit theme() verändert werden.

Grafik speichern

Das aktuell angezeigte ggplot Diagramm lässt sich mit ggsave() speichern: ggsave("plot.png", width = 5, height = 5) → speichert den Plot als PDF in 5x5 inch ab.

ggplots als Objekte abspeichern | 1

Es kann sehr nützlich sein, das Diagramm unter einem Objektnamen abzuspeichern um später darauf zugreifen zu können. Zum Beispiel

  • um weitere Ebenen später hinzuzufügen.
  • wenn der Basisplot Grundlage für mehrere Diagramme sein soll (reduziert Tipparbeit).
  • wenn mehrere Diagramme kombiniert werden sollen.
p1 <- ggplot(iris, 
  aes(
    x = Sepal.Length, 
    y = Petal.Length, 
    colour = Species
    ) +
  geom_point()
p1

ggplots als Objekte abspeichern | 2

Es kann sehr nützlich sein, das Diagramm unter einem Objektnamen abzuspeichern um später darauf zugreifen zu können. Zum Beispiel

  • um weitere Ebenen später hinzuzufügen.
  • wenn der Basisplot Grundlage für mehrere Diagramme sein soll (reduziert Tipparbeit).
  • wenn mehrere Diagramme kombiniert werden sollen.
p2 <- p1 +
  geom_smooth(method = "lm") +
  scale_colour_manual(values = 
    c("orange","cyan3", "#68228B"))
p2

ggplot - geom_XXX() Funktionen

Wann wird welche Funktion benutzt?

Das ist abhängig von

  • dem was dargestellt werden soll (die Frage/Fragekategorie)
  • und den Daten-/Merkmalstypen bzw. dem Skalenniveau:

(Häufigkeits)verteilungen

Kategorial (metrisch) (1 VAR)

Code
data(bshydro15, package = "marinedata")
bshydro15 |>
  ggplot(aes(x=month)) +
  geom_bar() +
  labs(title = "geom_bar()", 
    subtitle = "Säulendiagramm (bar plot)", 
    x = "Monat", 
    y = "Häufigkeit") +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10)) 

Metrisch (viele Werte) (1 VARIABLE)

Code
bshydro15 |>
  ggplot(aes(x=temp)) +
  geom_histogram() +
  labs(title = "geom_histogram()", 
    subtitle = "Histogramm", 
    x = "Temperatur", y = "Häufigkeit") +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10)) 

Code
bshydro15 |>
  ggplot(aes(x=temp)) +
  geom_density(fill = "orange") +
  labs(title = "geom_density()", 
    subtitle = "Dichteplot (density plot)", 
    x = "Temperatur", y="Dichte") +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10)) 

Kategorial (metrisch) (2 VAR)

Code
bshydro15 |>
  mutate(
    fquarter = factor(lubridate::quarter(date_time)),
    fwday = factor(lubridate::wday(date_time))
  ) |>
  ggplot(aes(x=fquarter, y=fwday)) +
  geom_count() + 
  scale_size_area(max_size = 7) +
  labs(title = "geom_count()", 
    subtitle = "sog. Count Plot", 
    x="Jahresquartal", y="Wochentag") +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10)) 

Metrisch (viele Werte) (2 VARIABLEN)

Code
bshydro15 |>
  drop_na() |>
  ggplot(aes(x=temp, y=psal)) +
  geom_bin2d() +
  labs(title = "geom_bin2d()", 
    subtitle = "sog. Heatmap - 2d bin counts",
    x = "Temperatur", y = "Salinität") +
  scale_fill_gradient2(
    trans = "log",
    breaks = c(1, 10, 50, 250),
    guide = guide_legend(
      title = "Häufigkeit (log)")
  ) +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10)) 

Code
bshydro15 |>
  ggplot(aes(x=temp, y=psal)) +
  geom_density2d(colour = "red")+
  labs(title = "geom_density2d()", 
    subtitle = "2D Dichteplot",
   x = "Temperatur", y = "Salinität") +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10)) 

Verteilungen - ein Gruppenvergleich

Kategorial & Metrisch (2 VARIABLEN)

Code
iris |>
  ggplot(aes(x = Species, 
    y = Sepal.Length)) +
  geom_boxplot() +
  labs(title = "geom_boxplot()", 
    subtitle = "Box-(Whisker-) Plot",
    x = "Art", y = "Sepalblattlänge") +
  theme(text = element_text(size = 15),
    axis.text = element_text(size = 10)) 

Code
iris |>
  ggplot(aes(x = Species, 
    y = Sepal.Length)) +
  geom_violin() +
  labs(title = "geom_violin()", 
    subtitle = "Violinplot",
    x = "Art", y = "Sepalblattlänge") +
  theme(text = element_text(size = 15),
    axis.text = element_text(size = 10)) 

Code
iris |>
  ggplot(aes(x = Species, 
    y = Sepal.Length)) +
  geom_jitter(width = 0.05) +
  labs(title = "geom_jitter()",
    subtitle = "sog. Stripchart",
    x = "Art", y = "Sepalblattlänge") +
  theme(text = element_text(size = 15),
    axis.text = element_text(size = 10)) 

Gruppenvergleich (von Statistiken)

Kategorial & Metrisch (2 VARIABLEN)

Code
iris |>
  group_by(Species) |>
  summarise(
    Mean = mean(Sepal.Length), 
    SD = sd(Sepal.Length)
  ) |>
  ggplot(aes(x = Species, y = Mean, 
    fill = Species)) +
    geom_col() +
    geom_errorbar(aes(ymin = Mean-SD, 
      ymax = Mean+SD), width = 0.2) +
    labs(
      title = "geom_col() und geom_errorbar()", 
      subtitle = "Säulendiagramm mit Fehlerbalken",
      x = "Art", y = "mittlere Sepalblattlänge"
    ) +
    guides(fill = "none") +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10)) 

Code
iris |>
  group_by(Species) |>
  summarise(
    Mean = mean(Sepal.Length), 
    SD = sd(Sepal.Length)
  ) |>
  ggplot(aes(x = Species, y = Mean)) +
    geom_pointrange(aes(ymin = Mean-SD, 
      ymax = Mean+SD)) +
    labs(
      title = "geom_pointrange()", 
      subtitle = "sog. Point-Range-Plot",
      x = "Art", y = "mittlere Sepalblattlänge"
    ) +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10)) 

Kategorial & Metrisch (3 VAR)

Code
CO2 |>
  group_by(Type, Treatment) |> 
  summarise(
    Mean = mean(uptake), 
    SD = sd(uptake)
  ) |>
  ggplot(aes(x = Type, y = Mean, 
    fill = Treatment)) + 
  geom_col(position = "dodge") +
  geom_errorbar(aes(ymin = Mean-SD, 
    ymax = Mean+SD), width = 0.2, 
    position = position_dodge(.9)) +
  labs(
    title = "geom_col(position='dodge') und \ngeom_errorbar(position = position_dodge())", 
    subtitle = "Gruppiertes Säulendiagramm mit Fehlerbalken",
    x = "Typ", y = "mittlere CO2-Aufnahme",
    fill = "Behandlung"
  ) +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10),
    plot.title = element_text(size = 12),
    plot.subtitle = element_text(size = 11)
  )

Teile-des-Ganzen / Komposition

Kategorial (& Anteil) (1 bzw. 2 VAR)

Code
data(penguins, package = "palmerpenguins")

# Version 1: den Anteil selbst berechnen
# und dann geom_col() verwenden:
# penguins |>
#   group_by(species, island) |>
#   summarise(counts = n()) |>
#   ggplot(aes(x = factor(1), y = counts,
#     fill = species)) +
#   geom_col(position = "fill", width = 1) +
#   coord_polar(theta = "y") +
#   labs(
#     title = "geom_col() und coord_polar()",
#     subtitle = "Tortendiagramm (pie chart)",
#     fill = "Pinguinart"
#   )  +
#   theme_void()

# Version 2: mit geom_bar()
penguins |>
  ggplot(aes(x = factor(1), fill = species)) +
  geom_bar(width = 1) +
  scale_fill_manual(values = c("#a16a7f", "#9ba16a", "#6a7fa1")) +
  coord_polar(theta = "y") + 
  labs(
    title = "geom_bar() und coord_polar()",
    subtitle = "Tortendiagramm (pie chart)",
    fill = "Pinguinart"
  )  +
  theme_void() +
  theme(axis.text = element_blank(),
    text = element_text(size = 13))

Kategorial (& Anteil) (2 bzw. 3 VAR)

Code
penguins |>
  group_by(species, island) |>
  summarise(counts = n()) |>
  ggplot(aes(x = island, y = counts,
    fill = species)) +
  geom_col(position = "fill") +
  scale_fill_manual(values =
      c("#a16a7f", "#9ba16a", "#6a7fa1")) +
  labs(
    title = "geom_col(position = 'fill')",
    subtitle = "Gestapeltes Säulendiagramm",
    x = "Insel", y = "Anteil der Häufigkeit",
    fill = "Pinguinart"
  ) +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10))

Beziehungen zwischen Variablen

Metrisch (2 VARIABLEN)

Code
iris |>
  ggplot(aes(x = Petal.Length, 
      y = Sepal.Length)) + 
  geom_point() +
  labs(
    title = "geom_point()", 
    subtitle = "Streudiagramm (scatter plot)"
  ) +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10)) 

Code
iris |>
  ggplot(aes(x = Petal.Length, 
    y = Sepal.Length)) + 
  geom_point(alpha = 0.2) +
  geom_smooth() +
  labs(
    title = "geom_smooth()", 
    subtitle = "Glättungskurve"
  ) +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10)) 

Code
iris |>
  ggplot(aes(x = Petal.Length, 
    y = Sepal.Length)) + 
  geom_point(alpha = 0.2) +
  geom_smooth(method = "lm") +
  labs(
    title = "geom_smooth(method = 'lm')", 
    subtitle = "Regressionsgerade"
  ) +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10)) 

Metrisch (3 VARIABLEN X,Y,Z)

Code
iris |>
  ggplot(aes(x = Petal.Length, y = Sepal.Length)) + 
  geom_point(aes(size = Petal.Width)) +
  labs(
    title = "geom_point(aes(size=z))", 
    subtitle = "Blasenplot (bubble plot"
  ) +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10)) 

Metrisch (X,Y) & Kategorial (Z) (3 VARIABLEN)

Code
iris |>
  ggplot(aes(x = Petal.Length, y = Sepal.Length)) + 
  geom_point(aes(shape = Species, color = Species)) +
  labs(
    title = "geom_point(aes(shape=z, colour=z,..))", 
    subtitle = "Gruppiertes Streudiagramm"
  ) +
  theme(text = element_text(size = 13),
    axis.text = element_text(size = 10)) 

Your turn …

Quiz 1

ggplot(data = iris, 
  mapping = aes(x = Petal.Length)) +
  geom_histogram()

Quiz 2

ggplot(iris, 
  aes(x = Species, 
    y = Petal.Width)) +
  geom_boxplot(aes(fill = Species))

Quiz 3

ggplot(iris, 
  aes(x = Species, 
    y = Petal.Width)) +
  geom_point(alpha = 0.1, size = 5, 
    colour = 'red') 

Quiz 4

iris |>
  ggplot(aes(x = Petal.Length, y = Sepal.Length)) +
  geom_point(aes(size = Petal.Width)) 

Quiz 5

ggplot(data = mtcars, 
  aes(wt, mpg, label = rownames(mtcars))) +
  geom_point(aes(size = gear)) +
  geom_text(aes(colour = factor(cyl)), 
    hjust = 0, nudge_x = 0.05) +
  xlim(1,8)

Übungsaufgabe

Zu bearbeitende Swirl-Lektionen

Kurs DSB-02-Datenexploration mit R

  • L02-Erste grafische Analyse
  • L07-Globale Einstellungen und Grafiken_exportieren

Kurs DSB-04-Datenvisualisierung mit ggplot2

  • L01-Geschichtete Grammatik-Eine Einfuehrung in gglot2
  • L02-L07 zu den geom_XXX() Funktionen

Lernziele

Am Ende dieser Übungseinheit sollten Sie …

  • ..einfache Diagramme zur Datenexploration mithilfe der R Basisfunktionen erstellen können.
  • ..wissen, wie Grafiken als PDF, JPEG oder PNG Dateien gespeichert werden können.
  • ..das Prinzip der geschichten Diagrammerstellung in ggplot2 verstanden haben.
  • ..einen Überblick über die verschiedenen geom_XXX() Funktionen haben.
  • ..die wichtigsten Diagrammtypen in den entsprechenden Kategorien mit ggplot2 erstellen können.

Wie fühlen Sie sich jetzt…?

Total konfus?


Dann schauen Sie sich doch mal…

Posit Cheatsheet

Überblick an Funktionen im ggplot2 Paket

Cheatsheet zum ggplot2 Paket frei verfügbar unter diesem Link.

Total gelangweilt?

Dann testen Sie doch Ihr Wissen in folgendem Abschlussquiz und probieren Sie diese Challenges..

Challenge 1: Grafik erstellen

Versuchen Sie folgenden Plot mit dem iris Datensatz in base R zu reproduzieren:

plot(  # Weil x und y kontinuierlich sind, wird Diagramm automatisch ein Streudiagramm
  x = iris$Sepal.Length, 
  y = iris$Petal.Length, 
  col = iris$Species,
  pch = 11, 
  cex = 2, 
  ylab = "Länge Bütenblatt", 
  xlab = "Länge Kelchblatt",
  main = "Art-spezifische Beziehung beider Blattlängen"
  )

Challenge 2: Grafik erstellen und abspeichern

Versuchen Sie folgenden Plot mit dem iris Datensatz in base R zu reproduzieren und diesen als PDF abzuspeichern:

Lösungscode
pdf("MeinErstesPDF.pdf") # Erstellt eine neue PDF Datei
boxplot(
  formula = Petal.Length ~ Species, # In Boxplots werden Daten meist als Formel übergeben
  data = iris,
  col = "yellow"
)
dev.off()  # Schließt die Datei

Abschlussquiz

Bei weiteren Fragen: saskia.otto(at)uni-hamburg.de

Creative Commons License
Diese Arbeit is lizenziert unter einer Creative Commons Attribution-ShareAlike 4.0 International License mit Ausnahme der entliehenen und mit Quellenangabe versehenen Abbildungen.