R-Kurs
ggplot2
Visualisierung
Wien
ggplot2 Kurs in Wien: Professionelle Datenvisualisierung mit R. Grafiktypen, Themes, Kombination, interaktive Plots. 1-Tages-Kurs.

R-Kurs · Wien

Datenvisualisierung mit ggplot2

Professionelle Grafiken erstellen – von Histogramm bis Dashboard

1–2 Tage Dauer

max. 12 Gruppengröße

790 € Preis (1 Tag)

Auf Anfrage Nächster Termin

Daten sichtbar machen

Eine gute Grafik zeigt auf einen Blick, was tausend Zeilen Output verbergen. In diesem Kurs lernen Sie ggplot2 von Grund auf – das Visualisierungspaket in R, das ich selbst in jedem Projekt einsetze. Nach dem Kurs können Sie professionelle, publikationsreife Grafiken erstellen und an Ihre Bedürfnisse anpassen.

ggplot2 basiert auf der „Grammatik der Grafiken” – einem logischen System, mit dem Sie jede erdenkliche Grafik Schicht für Schicht aufbauen können. Das klingt abstrakt, macht aber nach einer Stunde Übung intuitiv Sinn.

Kursinhalte

1

Die Grammatik von ggplot2

  • Das Schichtsystem verstehen – data, aesthetics, geoms, scales, themes
  • Die Pipe in die Grafik – nahtloser Übergang von Datenaufbereitung zu Visualisierung

2

Grafiktypen

  • Histogramme und Dichteplots
  • Boxplots und Violinplots
  • Streudiagramme mit Regressionslinien
  • Balkendiagramme (absolut und gestapelt)
  • Liniendiagramme (Zeitreihen)
  • Heatmaps
  • und viele mehr

3

Grafiken anpassen

  • Achsenbeschriftung und Titel – klar und aussagekräftig
  • Legenden – positionieren, anpassen, entfernen
  • Themes – vorgefertigte und eigene Themes verwenden
  • Farben – Farbpaletten, ColorBrewer, manuelle Farben
  • Text und Annotationen – Beschriftungen direkt in der Grafik

4

Fortgeschrittene Techniken

  • Facetting – Daten in Teilgrafiken aufteilen (facet_wrap, facet_grid)
  • Kombination mehrerer Grafiken – mit patchwork
  • Interaktive Grafiken – mit plotly aus ggplot2-Objekten
  • Export – Grafiken in verschiedenen Formaten und Auflösungen speichern

Beispiel: Was Sie nach dem Kurs können

R-Code anzeigen
# Ridgeline: Temperatur-Verteilung pro Dekade
p1 <- ggplot(temp_dat, aes(x = t, y = decade, fill = after_stat(x))) +
  geom_density_ridges_gradient(
    scale = 2.2, rel_min_height = 0.01,
    quantile_lines = TRUE, quantiles = 2
  ) +
  scale_fill_gradientn(
    colours = rev(RColorBrewer::brewer.pal(11, "RdYlGn")), guide = "none"
  ) +
  labs(
    title = "Wien wird wärmer",
    subtitle = "Tagesmittel-Temperaturen je Dekade, Hohe Warte 1960–2024",
    x = "°C", y = NULL
  ) +
  theme_minimal(base_size = 10) +
  theme(plot.title = element_text(face = "bold", size = 13))

# Raincloud: Wahlbeteiligung pro Bundesland (mit "Regen" = Einzelgemeinden)
p2 <- ggplot(wahl_dat, aes(x = wahlbeteiligung, y = bundesland,
                           fill = bundesland)) +
  stat_halfeye(
    adjust = 0.6, width = 0.7, .width = c(0.5, 0.95),
    justification = -0.15, point_colour = NA, alpha = 0.85
  ) +
  geom_boxplot(width = 0.18, outlier.shape = NA, alpha = 0.6,
               colour = "grey20") +
  geom_point(position = position_nudge(y = -0.22),
             size = 0.7, alpha = 0.3, colour = "grey25") +
  scale_fill_brewer(palette = "Spectral", guide = "none") +
  scale_x_continuous(labels = function(x) paste0(x, " %")) +
  labs(
    title = "Wo wurde 2024 stärker gewählt?",
    subtitle = "Wahlbeteiligung pro Gemeinde, NRW 2024 – jeder Punkt = eine Gemeinde",
    x = NULL, y = NULL
  ) +
  theme_minimal(base_size = 11) +
  theme(plot.title = element_text(face = "bold", size = 13),
        panel.grid.major.y = element_blank())

# Dumbbell: Lebenserwartung EU 2010 → 2023
p3 <- ggplot() +
  geom_segment(
    data = le$wide,
    aes(x = y2010, xend = y2023, y = land, yend = land, colour = delta),
    linewidth = 1.6, lineend = "round"
  ) +
  geom_point(data = filter(le$long, year == 2010),
             aes(x = le, y = land), colour = "#D4A843", size = 2.4) +
  geom_point(data = filter(le$long, year == 2023),
             aes(x = le, y = land), colour = "#1B365D", size = 2.4) +
  scale_colour_gradient(low = "#E5E7EB", high = "#1B365D",
                        name = "Δ (J.)") +
  labs(
    title = "Lebenserwartung in der EU",
    subtitle = "2010 → 2023, sortiert nach Zugewinn",
    x = "Jahre", y = NULL
  ) +
  theme_minimal(base_size = 10) +
  theme(plot.title = element_text(face = "bold", size = 13),
        legend.position = "right",
        legend.key.height = unit(0.8, "lines"),
        legend.key.width  = unit(0.4, "lines"),
        panel.grid.major.y = element_blank())

# Bump: Top-Vornamen Wien
endpoints <- namen_dat |>
  group_by(geschlecht) |>
  filter(jahr == max(jahr)) |>
  ungroup()

bump_palette <- colorRampPalette(
  RColorBrewer::brewer.pal(8, "Set2")
)(n_distinct(namen_dat$name))

navy      <- "#1B365D"
gold_hell <- "#E9C46A"

p4 <- ggplot(namen_dat, aes(x = jahr, y = rang, colour = name)) +
  geom_bump(linewidth = 1.4, smooth = 8, alpha = 0.9) +
  geom_point(size = 2.6) +
  geom_text(data = endpoints, aes(label = name),
            hjust = 0, nudge_x = 0.2, size = 3.2, fontface = "bold",
            colour = gold_hell) +
  facet_wrap(~ geschlecht, ncol = 2) +
  scale_y_reverse(breaks = 1:8) +
  scale_x_continuous(breaks = c(2014, 2018, 2022),
                     limits = c(2014, 2025.5)) +
  scale_colour_manual(values = bump_palette) +
  guides(colour = "none") +
  labs(
    title = "Rangwechsel der Top-Vornamen in Wien",
    subtitle = "Top 8, 2014–2023",
    x = NULL, y = "Rang"
  ) +
  theme_minimal(base_size = 10) +
  theme(plot.background    = element_rect(fill = navy, colour = NA),
        panel.background   = element_rect(fill = navy, colour = NA),
        plot.title         = element_text(face = "bold", size = 13,
                                          colour = gold_hell),
        plot.subtitle      = element_text(colour = "grey80"),
        strip.text         = element_text(face = "bold", colour = gold_hell),
        axis.title         = element_text(colour = gold_hell),
        axis.text          = element_text(colour = "grey85"),
        panel.grid.minor   = element_blank(),
        panel.grid.major.x = element_blank(),
        panel.grid.major.y = element_line(colour = "grey30"))

# Layout: oben Ridgeline + Dumbbell nebeneinander,
#         darunter Raincloud + Bump je über die volle Breite
((p1 + p3) / p2 / p4) +
  plot_layout(heights = c(1, 1.4, 1.1)) +
  plot_annotation(
    title    = "Vier moderne Chart-Typen jenseits von Box & Balken",
    subtitle = "Ridgeline · Dumbbell · Raincloud · Bump",
    theme    = theme(
      plot.title    = element_text(face = "bold", size = 15,
                                   colour = "#1B365D"),
      plot.subtitle = element_text(colour = "grey40", margin = margin(b = 8))
    )
  )

Vier moderne ggplot2-Grafiktypen im 2x2-Raster: Ridgeline-Plot Wiener Temperaturen, Raincloud-Plot Wahlbeteiligung, Dumbbell-Plot EU-Lebenserwartung, Bump-Chart Wiener Vornamen.

Datenquellen:

  • Ridgeline – Temperaturen Wien: GeoSphere Austria Data Hub, Datensatz klima-v1-1d, Station 105 (Wien Hohe Warte), Tagesmittel-Temperatur 1960 bis September 2024
  • Raincloud – Wahlbeteiligung: Bundesministerium für Inneres, endgültiges Ergebnis der Nationalratswahl 2024, Gemeindeebene
  • Dumbbell – Lebenserwartung: Eurostat, Datensatz demo_mlexpec (Lebenserwartung bei Geburt, beide Geschlechter), 2010 vs. 2023
  • Bump – Vornamen Wien: Stadt Wien, Statistik der Vornamen Neugeborener, 2014–2023 (CC-BY 4.0)

Voraussetzungen

Nächste Termine

Auf Anfrage

Wien / Graz

HinweisAnmeldung

Kontaktieren Sie mich bei Interesse per E-Mail oder über das Kontaktformular.

Kursdetails

  • Preis: 790 € pro Person (exkl. MwSt., 1 Tag)
  • Dauer: 1–2 Tage (je nach gewünschter Tiefe)
  • Gruppengröße: Max. 12 Teilnehmende
  • Sprache: Deutsch
  • Was Sie mitbringen: Eigenen Laptop mit R, RStudio und installiertem ggplot2-Paket
  • Was Sie erhalten: Kursunterlagen, Beispieldaten und alle Grafik-Skripte

Interesse?

Jetzt anmelden

Häufig gestellte Fragen

Welche Vorkenntnisse brauche ich?

R-Grundkenntnisse (Datenimport, einfache Operationen). Erfahrung mit dem tidyverse ist hilfreich, aber nicht zwingend.

1 Tag oder 2 Tage – was ist sinnvoller?

Ein Tag reicht für die Grammatik der Grafiken und die wichtigsten Grafiktypen. Zwei Tage bringen zusätzlich Facetting, patchwork-Kombination und interaktive Plots mit plotly – sinnvoll, wenn Sie viel mit Reports oder Dashboards arbeiten.

Werden auch interaktive Grafiken behandelt?

Ja. Im zweiten Teil zeige ich, wie man aus einem ggplot2-Objekt mit plotly eine interaktive Variante macht, ohne den Code neu schreiben zu müssen.

Eignen sich die Grafiken für Publikationen?

Ja. ggplot2 erzeugt vektorbasierte Grafiken in jeder gewünschten Auflösung. Im Kurs sehen Sie, wie Sie Themes, Farbpaletten und Beschriftungen auf den jeweiligen Anwendungszweck (Journal, Report, Web) abstimmen.

Wann findet der nächste Kurs statt?

Der Termin wird bei ausreichend Anmeldungen festgelegt. Schreiben Sie mir Ihr Interesse – sobald sich eine Gruppe gefunden hat, melde ich mich mit einem Vorschlag.

Zurück nach oben