die Standardeinstellungen und -skalen der verschiedenen Aesthetics wie Farbe, Form, Grösse bei ggplot2 Grafiken ändern können.
Teilmengen von Daten auf verschiedene Felder einer Grafik aufteilen können.
Koordinatensysteme anpassen können, um z.B. Tortendiagramme, Polardigramme bzw. Coxcomb-Plots oder Karten zu erstellen.
Beschriftungen und Legenden anpassen können.
das Gesamtlayout und einzelne Layoutelemente verändern können.
einen ersten Einblick in die Erstellung einfacher geografischer Karten mit ggplot2 bekommen.
Maßgeschneiderte Grafiken
Wie komme ich von links nach rechts?
Darstellung des räumlichen Musters der Meeresoberflächentemperatur (im Engl. ‘sea surface temperature’ bzw. SST genannt) in der Ostsee (im Engl. ‘Baltic Sea’) im Sommer 2015:
Code
# library(ggplot2) # oder: library(tidyverse)p1 <-ggplot(sst_sum, aes(long, lat)) +geom_point(aes(colour = temp, shape = month))world <-map_data("world")worldmap <-ggplot(world, aes(x = long, y = lat)) +geom_polygon(aes(group = group), fill ="ivory3", colour ="black")baltic <- worldmap +coord_map("ortho", xlim =c(10, 30), ylim =c(54,66))p2 <- baltic +geom_point(data = sst_sum, aes(x = long, y = lat, colour = temp), size =1) +scale_colour_gradient(low ="white", high ="red") +facet_wrap(~month) +labs(x ="Longitude", y ="Latitude",title ="Thermal pattern in the Baltic Sea",subtitle ="SST in the summer months of 2015") +guides(colour =guide_colourbar(title ="SST (in °C)")) + ggthemes::theme_base(base_size =11) +theme(legend.position ="bottom", legend.title.align =1,legend.title =element_text(colour ="red", angle =0),panel.background =element_rect(fill ="lightblue1") )gridExtra::grid.arrange(p1, p2, nrow=1)
Der Datensatz | Komplett
Datensatz ist im Paket ‘marinedata’ enthalten:
# Laden des Datensatzes zur Ostsee (Baltic Sea) Hydrografie 2015data(bshydro15, package ="marinedata")str(bshydro15)
Schrittweise Berechnung der gemittelten SST (0-5m) pro Sampling in den Sommermonaten:
sst_sum <- bshydro15 |># Filtern der Sommermonate und Oberflächenmessungen (0-5m)filter(pres <=5, month %in%c("May", "Jun", "Jul", "Aug")) |># Gruppierung nach Variablen die Sampling definierengroup_by(station, lat, long, date_time, month, day) |># Bildung des Temperaturmittelwerts über die 5m summarise(temp =mean(temp, na.rm =TRUE)) |>ungroup() |># Hinzufügen des Probezeitraumsmutate(hour = lubridate::hour(date_time), # Extrahiert die Stundesampling =case_when( # Bildet Kategorien basierend auf den Stunden hour >=6& hour <21~"day",TRUE~"night") )
Es soll ein sog. Blasenplot (‘bubble plot’) erstellt werden, sprich ein Streudiagramm bei dem die Größe der Punkte abhängig ist von einer dritten, quantitativen Variable (‘z’).
Um die Voreinstellung eines Attributs zu verändern verwenden Sie eine Skala, die zu dem Attribut passt (bei Variablen-spezifischer Zuweisung mit aes()):
aesthetic mapping = Welche Variable kartiere ich mit z.B. Farbe
scale = Wie kartiere ich eine Variable mit z.B. Farbe
Verwende die dreiteilige Namenskonvention und füge weitere Argumente zur Skalenfunktion hinzu, falls gewünscht (z.B. name für einen Legendennamen):
Übliche Skalen
Positionsskalen für quantitative Variablen
scale_x_continuous() → Standardskala für kontinuierliche x-Werte.
scale_x_log10() → Abbildung von x auf einer log10-Skala.
scale_x_reverse() → Dreht die Achsenausrichtung um.
scale_x_sqrt() → Abbildung von x auf einer Quadratwurzelskala.
xlim(), ylim(), lims() → Stellt Achsenbegrenzungen ein.
(tausche x einfach gegen y)
Für viele Attribute
lassen sich die Skalenfunktionen
scale_XXX_manual()
scale_XXX_identity()
scale_XXX_discrete()
scale_XXX_continuous()
scale_XXX_binned()
verwenden.
Positionsskala
Log10-Transformation
→ Was ist der Hauptunterschied?
Transformation der XY-Variablen
ggplot(iris, aes(x =log10(Petal.Length), y =log10(Sepal.Length))) +geom_point()
Transformation der XY-Skalen
ggplot(iris, aes(x = Petal.Length, y = Sepal.Length)) +geom_point() +scale_x_log10() +scale_y_log10()
Sekundärachse
Hier ein Beispiel, wo scale_x_reverse() und scale_x_continuous() in Kombination mit sec_axis() für eine Sekundärachse sehr praktisch sind:
Beispiel Tiefenprofil
Code
bshydro15 |>filter(station =="0508", day ==5, month =="Aug") |>ggplot(aes(y = pres)) +geom_path(aes(x = temp), col ="red") +geom_path(aes(x = psal), col ="blue") +# Variable der Sekundärachse anpassen:geom_path(aes(x = doxy*2), col="green") +scale_y_reverse() +scale_x_continuous(sec.axis =sec_axis(~./2, # = Primärachse (.) durch 2name="doxy"))
Farbskala - Standardeinstellungen | 1
Qualitative Variablen
Die Voreinstellung von ‘ggplot2’ bei Variablen vom Typ character oder factor ist (in Abhängigkeit davon wieviele Farben benötigt werden):
Quantitative Variablen
Die Voreinstellung von ‘ggplot2’ bei Variablen vom Datentyp integer oder double ist:
Farbskala - Standardeinstellungen | 1
ggplot2 erkennt automatisch, ob Variablen qualitativ oder quantitativ sind:
iris |>mutate(Species2 =case_when( Species =="setosa"~1, Species =="versicolor"~2,TRUE~3) ) |>ggplot(aes(Sepal.Length, Petal.Length)) +geom_point(aes(colour = Species2))
Farbskala - Überblick aller Funktionen
Qualitative Farbskalen | 1
p <-ggplot(sst_sum, aes(x = long, y = lat, colour = month)) +geom_point()
Standard bei qualitativer Variable
p
Manuelle Anpassung der Farbskala → scale_colour_manual()
p +scale_colour_manual(values =c("red","blue","grey30","green3"))
Darstellung in Graustufen → scale_colour_grey()
p +scale_colour_grey(name ="Month") # Legendentitel
Qualitative Farbskalen | 2
ColorBrewer
Die ‘brewer’ Palette in scale_colour_brewer() bietet schöne Farbschemata von ‘ColorBrewer’, die speziell für Karten gefertigt wurde: http://colorbrewer2.org
Mit folgendem Befehl wird eine Liste jeder ‘brewer’ Palette aufgerufen:
p <-ggplot(sst_sum, aes(x = long, y = lat,colour = temp)) +geom_point()p +scale_colour_gradient(low ="#132B43", high ="#56B1F7")
2-/3/n-Farbgradient
scale_colour_gradient() ist die voreingestellte Farbskala. Sie erzeugt einen Gradienten von niedrig zu hoch (siehe rechten Plot).
scale_colour_gradient2() erzeugt einen auseinanderlaufen Farbverlauf mit 3 Farben (niedrig//mittel/hoch) und ist besonders zum Setzen von Kontrasten geeignet.
scale_colour_gradientn() erzeugt einen Gradienten mit n Farben.
→ scale_colour_gradient()
Von gelb zu rot
p +scale_colour_gradient(low ="yellow", high ="red")
Fehlende Werte in gelb
p +scale_colour_gradient(low ="white", high ="maroon4",na.value ="yellow")
→ scale_colour_gradient2()
2-Farbgradient mit midpoint
p +scale_colour_gradient2(midpoint =10)
2-Farbgradient mit midpoint und Farben
p +scale_colour_gradient2(midpoint =15,low ="blue", mid ="yellow",high ="red", na.value ="black")
Anpassung der Formskala von Punkten
→ scale_shape_manual() bei qualitativen Variablen
p <-ggplot(sst_sum, aes(long, lat)) +geom_point(aes(shape = month))
Es lassen sich eigentlich nur qualitative Variablen (vom Typ ‘character’ oder ‘factor’) dem Attribut shape zuweisen.
Standardformen
p
Anpassung
p +scale_shape_manual(values =0:3)
→ scale_shape_identity() bei diskreten Variablen
Wenn eine diskrete Variable Werte zwischen 0 und 25 beinhaltet (entspricht den Formwerten), kann ggplot2 die Variable dem Attribut shape zuordnen
→ wenn die Funktion scale_shape_identity() hinzugefügt wird (ansonsten gibt es eine Fehlermeldung).
Die sog. ‘facet’ Funktionen unterteilen eine Grafik in verschiedene Felder basierend auf den Werten einer oder mehrerer qualitativer Variablen.
Jedes Feld (‘panel’) visualisiert dadurch nur eine Teilmenge der Daten.
Nützlich zur Untersuchung von Interaktionen zwischen Variablen.
Trennung der Samplings nach Tag/Nacht
p <-ggplot(sst_sum, aes(x=long,y=lat)) +geom_point()p +facet_wrap(~sampling, nrow =1)
Faceting | Labels anpassen
Um die Label der ‘facets’ anzupassen, verwende das Argument labeller:
Trennung der Samplings nach Tag/Nacht und Monat
p +facet_grid(sampling ~ month, labeller = label_both)
Faceting | Übersicht
Your turn …
00:30
Quiz 5-6 | Faceting
Q5 | Nach 1 Variable aufteilen
Ein Streudiagramm soll entsprechend einer kategorialen Variable (‘z’) in Teildiagramme (‘facets’) aufgeteilt werden. Diese Teildiagramme sollen dabei in einer Spalte angeordnet werden.
Das Setzen der Achsengrenzen im Koordinatensystems verändert nicht die Daten, sondern ist wirklich nur als Zoomen zu betrachten. Die Glättungskurve hat sich für diesen Ausschnitt nicht verändert.
Anpassung der X-Skala
pks +scale_x_continuous(limits =c(325, 500))
Das Setzen der Achsengrenzen auf der Skalenebene wandelt alle Werte außerhalb des Bereichs in NA um. Entsprechend sieht die Glättungskurve für diesen Bereich anders aus, als im größeren Ausschnitt!
Shortcut für die X-Skala
pks +xlim(325, 500)
Kurzhand-Notation für scale_x_continuous()
Daten- vs. KS-Transformation
ggplot2 Funktionen für KS-Transformationen erlauben eine Veränderung der Positionierung der Elemente im Koordinatensystem, ohne die Daten zu modifizieren.
Dies kann eine andere Aussage bei der Visualisierung bewirken:
Ohne Transformation
Code
data(mammals, package ="MASS")ggplot(mammals, aes(x = body, y = brain)) +geom_point()
Transformation der Variablen
Code
ggplot(mammals, aes(x =log(body), y =log(brain))) +geom_point()
coord_map() projiziert einen Ausschnitt der annähernd kugelförmigen Erde auf eine flache 2D-Ebene mit Hilfe einer Projektion, die durch das Paket ‘mapproj’ definiert ist.
Die Weltkarte
world <-map_data("world")worldmap <-ggplot(world, aes(x = long, y = lat)) +geom_polygon(aes(group = group), fill ="white", colour ="black")worldmap
library(ggplot2) # oder: library(tidyverse)world <-map_data("world")worldmap <-ggplot(world, aes(x = long, y = lat)) +geom_polygon(aes(group = group), fill ="ivory3", colour ="black")baltic <- worldmap +coord_map("ortho", xlim =c(10, 30), ylim =c(54,66))p2 <- baltic +geom_point(data = sst_sum, aes(x = long, y = lat, colour = temp), size =1) +scale_colour_gradient(low ="white", high ="red") +facet_wrap(~month) +labs(x ="Longitude", y ="Latitude",title ="Thermal pattern in the Baltic Sea",subtitle ="SST in the summer months of 2015") +guides(colour =guide_colourbar(title ="SST (in °C)")) + ggthemes::theme_base() +theme(legend.position ="bottom", legend.title.align =1,legend.title=element_text(colour ="red", angle =0),panel.background =element_rect(fill ="lightblue1") )p2
Übungsaufgabe
Optionale swirl-Lektionen zur Vertiefung
Kurs DSB-04-Datenvisualisierung mit ggplot2
L08-Aesthetics_und_deren_Skalierung
L09-Facets
L10-Koordinatensysteme
L11-Labels_und_Guides
L12-Themes
L14-Karten erstellen mit ggplot2
Übungsskripte
Schrittweise Modifikation von ggplot-Diagrammen – vom einfachen Streudiagramm zur publikationsfähigen Karte: DS1_W10_Uebungsskript_ggplotDiagrammeModifizieren.R
Fallstudien
Sie sind jetzt so weit, …
..dass sie eine erste Karte für Ihre Fallstudie erstellen können!
Probieren Sie sich mit den ggplot2 Diagramme ihrer Fallstudie aus, ändern Sie viele der Standardeinstellungen und versuchen Sie mal die erste Karte zu erstellen.
Wie fühlen Sie sich jetzt…?
Total konfus?
Dann empfehle ich Ihnen:
Versuchen Sie einige der Diagramme in der Präsentation zu reproduzieren,
lesen Sie Kapitel 3 Data visualisation über Datenvisualisierung in ‘R for Data Science’ oder