Ein Stufendiagramm veranschaulicht den jährlichen Niederschlag in München von 1955 bis 2016
War 2015 ein eher trockenes Jahr oder hat es besonders viel geregnet? Ein Stufendiagramm liefert die Antwort. Diese besondere Form des Liniendiagramms eignet sich gut, um diskrete Wertänderungen wie etwa den Preis von Briefmarken abzubilden, oder eben Niederschlagswerte.
Mit Hilfe der beiden Packages dplyr und lubridate lässt sich das komfortabel bewerkstelligen. Die Idee zu dieser Grafik ist von Kay Cichini und seinem Blogbeitrag auf http://thebiobucket.blogspot.de/2012/09/get-historical-climate-data-from-knmi.html sowie der Adaptation von Christina Bergey auf http://christinabergey.com/blog/2012/09/quick-precipitation-plots-in-r/. Das Beispiel arbeitet aber etwas anders. Es nutzt eine andere Datenquelle, und es verwendet ggplot2
, um die Grafik zu erstellen. Die Daten stammen vom Deutschen Wetterdienst (www.dwd.de). Unter ftp://ftp-cdc.dwd.de/pub/CDC/observations_germany/climate/daily/kl/historical/ finden sich Messwerte von 1086 Wetterstationen quer durch Deutschland. München hat die Nummer 3379.
library(ggplot2) library(dplyr) library(lubridate) rain <- read.csv("E:/Source/R-3.3.1/Projekte/daten/precipitation.txt", sep = ";", header = T, row.names = NULL) rain[rain == -999] = NA rain$MESS_DATUM <- year(ymd(rain$MESS_DATUM)) rain <- rain %>% select(MESS_DATUM, NIEDERSCHLAGSHOEHE) %>% group_by(MESS_DATUM) %>% summarise(regen = sum(NIEDERSCHLAGSHOEHE)) av <- round(mean(rain$regen)) ggplot(rain)+ geom_step(aes(x = MESS_DATUM, y = regen), colour = "blue")+ theme_bw()+ theme(axis.title.x = element_blank(), plot.title = element_text(size=12))+ labs(title="MÜNCHEN, 48.1N, 11.6E, 530m", y = "jährlicher Niederschlag (mm)", x = "")+ scale_x_continuous(breaks=seq(1955, 2015, 5))+ scale_y_continuous(breaks=seq(600, 1350, 100))+ geom_hline(yintercept = av, linetype = 2)+ geom_segment(aes(x = 1954, y = 1200, xend = 1954, yend = av + 10), arrow = arrow(length = unit(0.3, "cm")))+ annotate("text", x = 1954, y = 1210, label = "Durchschnitt = 958mm", size = 3, hjust = 0)
Das Skript: Die benötigten Pakete wurden bereits erwähnt. Die Daten stehen als Text-Datei bereit und werden mit read.csv()
eingelesen. Fehlende Messwerte, in der Quelle als -999 angegeben, wandelt das Skript in NA um, damit R damit umgehen kann. rain$MESS_DATUM <- year(ymd(rain$MESS_DATUM))
wandelt in einem Rutsch die Datums-Angaben in den Typ "Date" um und extrahiert daraus die Jahre, da uns nur diese interessieren. Ohne lubridate
wäre das äußerst umständlich zu bewerkstelligen. Nun kommt die Magie von dplyr
ins Spiel. Mit dem Pipe-Operator werden auf einen Schlag die benötigten Spalten ausgewählt, die Jahre gruppiert und die Summe der Niederschläge berechnet. Schließlich erfolgt noch die Berechnung des Durchschnitts.
Der Plot: ggplot2
hält für Stufendiagramme die Funktion geom_step()
bereit. Die Parameter sind die X- und Y-Werte sowie die Farbe. Nach der Beschriftung folgt die Achseneinteilung sowie die Zeichnung der Durchschnittslinie. Der Pfeil entsteht mit Hilfe von geom_segment()
und der Funktion arrow()
. Schließlich fügt annotate()
noch eine Beschriftung ein. Ergebnis: Mit rund 850 mm Niederschlag war 2015 wie auch die Jahre davor eher trocken. 2016 lag ziemlich nahe am Durchschnitt.
Schreibe einen Kommentar