Ridgeline-Plot in R: Verteilungen über die Zeit zeigen
R
ggplot2
Visualisierung
Klima
Autor:in
DI Dr. Johannes Hofrichter
Veröffentlichungsdatum
20. Juli 2026
Ein Ridgeline-Plot stapelt viele Dichtekurven leicht überlappend übereinander – und macht so auf einen Blick sichtbar, wie sich eine Verteilung über Gruppen oder über die Zeit verschiebt.
Ein einzelner Mittelwert pro Jahrzehnt verschweigt das Interessante: ob die Streuung zunimmt, ob die kalten Extreme seltener werden, ob sich die ganze Verteilung verschiebt oder nur ihr Schwerpunkt. Genau dafür ist der Ridgeline-Plot (manchmal „Joyplot” genannt) gemacht. Jede Zeile ist eine eigene Dichtekurve, und weil die Kurven einander leicht überlappen, lassen sich auch zwei Dutzend Gruppen noch platzsparend nebeneinanderlegen. Ich zeige das an den Wiener Tagesmittel-Temperaturen je Dekade von 1960 bis 2024 – ein Datensatz, in dem die Klimaerwärmung als langsames Wandern der Kurven nach rechts auftaucht.
Die Daten
Die Tagesdaten stammen vom GeoSphere Austria Data Hub (Datensatz klima-v1-1d, Station 105 – Wien Hohe Warte). Die API liefert die Tagesmittel-Temperatur (t) direkt als CSV, sodass sich der ganze Zeitraum mit einem einzigen read_csv() einlesen lässt.
Aus dem Zeitstempel leite ich Jahr und Dekade ab. Die laufende Dekade (2020er) wird gesondert beschriftet, weil sie noch nicht vollständig ist. Danach bleiben nur die zwei Spalten übrig, die der Plot braucht: die Temperatur t und die decade.
Den Kern bildet geom_density_ridges_gradient() aus dem Paket ggridges. Über scale = 2.2 steuere ich, wie stark die Kurven überlappen, und quantile_lines = TRUE mit quantiles = 2 zeichnet die Medianlinie in jede Verteilung. Die Füllfarbe folgt nicht der Gruppe, sondern dem Temperaturwert selbst (fill = after_stat(x)) – so wird eine umgekehrte RdYlGn-Palette zur Temperaturskala von kalt (grün) nach warm (rot). theme_minimal() hält den Rest ruhig.
Code: Grafik
ggplot(temp, 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(name ="°C",colours =rev(RColorBrewer::brewer.pal(11, "RdYlGn")) ) +scale_x_continuous(breaks =seq(-15, 35, 5)) +labs(title ="Wien wird wärmer",subtitle ="Tagesmittel-Temperaturen Wien Hohe Warte je Dekade, 1960–2024",x ="Tagesmittel-Temperatur (°C)",y =NULL,caption ="Daten: GeoSphere Austria (klima-v1-1d, Station 105). Linie = Median." ) +theme_minimal(base_size =12) +theme(legend.position ="none",plot.title =element_text(face ="bold", size =18),plot.subtitle =element_text(colour ="grey40", margin =margin(b =12)),panel.grid.minor =element_blank() )
So liest man die Grafik: Jede Zeile ist eine Dekade, die Kurve zeigt, wie häufig welche Tagesmittel-Temperatur vorkam, die senkrechte Linie markiert den Median. Von unten nach oben wandern sowohl der Median als auch die warme Flanke der Verteilung nach rechts – die Erwärmung trifft also nicht nur die Mitte, sondern verschiebt das gesamte Temperaturspektrum. Als Variante könnten Sie statt der Dekaden einzelne Jahre auf die y-Achse legen oder die Verteilungen nach Jahreszeit aufteilen.
Eigene Daten so darstellen?
Solche Visualisierungen entstehen bei mir am Ende einer sauberen Datenanalyse – von der Quelle bis zur fertigen Grafik. Wenn Sie ggplot2 selbst lernen möchten, zeige ich genau diese Techniken im Visualisierungskurs. Weitere moderne Diagrammtypen finden Sie im Raincloud-Plot, im Dumbbell-Chart und im Bump-Chart.