Durchschnittliches Vermögen pro Erwachsenem in US-Dollar im Jahr 2018, basierend auf dem Global Wealth Databook der Credit Suisse.
Gesammelte und typischerweise gruppierte Daten (z. B. nach Regionen) werden als Fläche durch Farben, Schattierungen oder Schraffierungen abhängig zum darzustellenden Wert abgebildet.
Je nach Art und Weise der Gruppierung (z. B. durch Mittelwertbildung, Median oder Summierung) kann das Ergebnis bzw. der Wert unterschiedlich sein.
Punktkartogramm des gesamten Bruttoinlandsprodukts der Länder in Europa im Jahr 2018.
engl. ‘Proportional Symbol Map’
Punktsymbole unterschiedlicher Größe (Höhe, Länge, Fläche oder Volumen) werden verwendet, um quantitative statistische Werte darzustellen, die mit verschiedenen Bereichen oder Orten innerhalb der Karte verbunden sind.
Erfolgt die Anordnung der Punkte auf der Fläche schematisch innerhalb von (administrativen) Bezugsflächen spricht man auch von einem Punktkartogramm.
# Weltkarte 1 (Atlantik im Zentrum)world <-map_data(map ='world')# Deutschland aus Weltkarte beim Abgreifen filterngermany <-map_data(map ='world', region ='Germany')str(germany)
'data.frame': 568 obs. of 6 variables:
$ long : num 14.2 14.2 14 13.9 13.9 ...
$ lat : num 53.9 53.9 53.9 53.9 53.9 ...
$ group : num 1 1 1 1 1 1 1 1 1 1 ...
$ order : int 1 2 3 4 5 6 7 8 9 10 ...
$ region : chr "Germany" "Germany" "Germany" "Germany" ...
$ subregion: chr "Usedom" "Usedom" "Usedom" "Usedom" ...
Weltkarte erstellen
→ geom_polygon()
wmap <-ggplot(world, aes(x = long, y = lat)) +geom_polygon(aes(group = group, fill = region)) +guides(fill ='none') +scale_fill_grey() +theme_minimal()wmap
Eine recht ansprechende Projektion ist die orthografische Azimutalprojektion welche den Nordpol im Zentrum hat:
projection = 'orthographic'
# Das Zentrum muss in die Mitte des # Zoomausschnitts verschoben werden:# 'orientiation' = c(latitute, # longitude, rotation)wmap +coord_map(projection ='orthographic', orientation =c(55, 10,0),xlim =c(-10, 30), ylim =c(35,70) )
Anfügen weiterer Daten
Beispiel für eine Choroplethenkarte
Code
wooded_area <-read.csv("area_of_wooded_land.csv", sep =";")# Einfügen der neuen Daten in 'world' data frameworld_wood <- dplyr::left_join(world, wooded_area, by =c("region"="country"))# Darstellung der Europakarte mit neuen Datenwood_map <-ggplot(world_wood, aes(x = long, y = lat)) +geom_polygon(aes(group = group, fill = X2020)) +# fill = X2020 ist neu# Anpassung der kontinuerlichen Farbskala und Legendescale_fill_gradient2(low ="#edf8e9", mid ="#74c476", high ="#005a32",midpoint =10000, guide ="legend", n.breaks =10) +labs(x ="Längengrad", y ="Breitengrad",fill ="Bewaldete Fläche in \n2020 (in 1000ha)",caption ="Quelle: Eurostat Datenbank (https://ec.europa.eu/eurostat/web/main/home)") +coord_map(projection ='orthographic', orientation =c(55, 10,0),xlim =c(-10, 30), ylim =c(35,70)) +theme_minimal() +theme(panel.border =element_rect(color ="black", fill =NA, linewidth = .5))wood_map
Weitere Pakete zur Kartenerstellung
Das tmap Paket
tmap ist eine aktiv gepflegte Open-Source R-Bibliothek zum Zeichnen thematischer Karten. Die API basiert auf A Layered Grammar of Graphics und ähnelt der Syntax von ggplot2.
Artikel: Tennekes, M. (2018) tmap: Thematic Maps in R. Journal of Statistical Software, Vol 84(6)
mapsf (früher cartography) hilft bei der Gestaltung verschiedener kartografischer Darstellungen wie Proportionssymbole, Choroplethen- oder Typologiekarten.
Außerdem bietet es verschiedene Funktionen zur Anzeige von Layout-Elementen, die die grafische Darstellung von Karten verbessern (z. B. Maßstabsbalken, Nordpfeil, Titel, Beschriftungen).
mapsf kartiert sf Objekte mittels R Basis Grafiken
Plotly - mehr als 40 Diagrammtypen (statistische, 3D-Diagramme, SVG-Karten) ➜ R Paket: plotly (https://plot.ly/r/) - neben der Bindung zur Plotly.js Biobliothek übersetzt das Paket auch ggplot2-Grafiken in eine interaktive, webbasierte Version
Mit ggplotply() können ggplot2 Grafiken ganz einfach in interaktive Diagramme umgewandeln werden!
gg_bill <-ggplot(data = palmerpenguins::penguins, aes(x = bill_length_mm , y = body_mass_g, color = species)) +geom_point()ggplotly(gg_bill) # Umwandlung zu plotly Objekt
Standardmäßig werden alle Infos von Variablen im ‘Tooltip’ angezeigt, die den definierten Aesthetics zugewiesen wurden.
Anpassungen über das 'tooltip' Argument
ggplotly(gg_bill, tooltip ='all') # Standardeinstellungggplotly(gg_bill, tooltip ='species') # zeigt nur Infos der species Variableggplotly(gg_bill, tooltip ='colour') # Alternativ: Aestheticnamen verwendenggplotly(gg_bill, tooltip =c('bill_length_mm', 'species')) # zeigt Infos von 2 Var.
plotly | Anzeige beim ‘Mouseover’ 2
Nicht definierte (sichtbare) Variablen, die im Tooltip aber erscheinen sollen, müssen den Aesthetics label, text oder group zugewiesen werden:
Anzeige nicht sichtbarer Variablen
gg_bill2 <- gg_bill +aes(group = island, label = body_mass_g , text = sex) # text zeigt nicht denggplotly(gg_bill2, tooltip =c('group', 'label', 'text')) # Variablennamen an!
plotly | Anzeige beim ‘Mouseover’ 3
Hilfreich beim Identifizieren von Datenpunkten ist die Vergabe einer Zeilen-ID, die dann dem Aesthetic ids übergeben wird:
Anzeige der ID im Tooltip
p <- penguins |>mutate(id =1:nrow(penguins)) |># falls es nicht schon eine ID gibtggplot(aes(x = bill_length_mm , y = body_mass_g, color = species, ids = id)) +geom_point()plotly::ggplotly(p)
plotly Grafiken kombinieren
Die Funktion subplot() im plotly Paket ist ähnlich wie die Funktion grid.arrange() Funktion aus dem gridExtra Paket
p_bill <-ggplotly(gg_bill)# Erstelle zweites Diagrammgg_weight <-drop_na(penguins, sex) |>ggplot(aes(x = species, y = body_mass_g))+geom_boxplot(aes(fill = sex))p_weight <-ggplotly(gg_weight)# In einer Zeile anordnen und relative Breite ändern, Legende ausblendensubplot(p_bill, gg_weight, nrows =1, widths =c(0.7, 0.3)) |>hide_legend()
Animationen mit plotly | Beispiel 1
Für Animationen muss das frame Aesthetic definiert werden!
gg <-ggplot(gapminder::gapminder, aes(x = gdpPercap, y = lifeExp, color = continent, size = pop, frame = year)) +geom_point() +scale_x_log10()plotly::ggplotly(gg)
plotly | Export als HTML- oder Bilddatei
Zum Speichern gibt es bei plotly 3 Möglichkeiten:
Die GUI von RStudio/Posit nutzen wie bei leaflet.
Die Download-Schaltfläche von Plotlys Menüleiste verwenden.
Mit den saveWidget() und webshot() Funktionen wie bei leaflet:
# Speichern im HTML-Formathtmlwidgets::saveWidget(widget = p_bill, file ="plotly-Diagramm.html")# Umwandlung von HTML zu PNG, JPG,..webshot2::webshot(url ="plotly-Diagramm.html", file ="plotly-Diagramm.png", vwidth =600, vheight =480)
plotly | Mehr Möglichkeiten
Die Möglichkeiten mit ggplot2 und der Konvertierungsfunktion ggplotly() sind begrenzt.
Mehr Optionen gibt es bei der Verwendung von plotlys eigener Syntax:
Code
library(reshape2)library(tidyverse)library(tidymodels)library(plotly)library(kernlab)library(pracma) # Für meshgrid()mesh_size <- .02margin <-0X <- iris |>select(Sepal.Width, Sepal.Length)y <- iris |>select(Petal.Width)model <-svm_rbf(cost =1.0) |>set_engine("kernlab") |>set_mode("regression") |>fit(Petal.Width ~ Sepal.Width + Sepal.Length, data = iris)x_min <-min(X$Sepal.Width) - marginx_max <-max(X$Sepal.Width) - marginy_min <-min(X$Sepal.Length) - marginy_max <-max(X$Sepal.Length) - marginxrange <-seq(x_min, x_max, mesh_size)yrange <-seq(y_min, y_max, mesh_size)xy <-meshgrid(x = xrange, y = yrange)xx <- xy$Xyy <- xy$Ydim_val <-dim(xx)xx1 <-matrix(xx, length(xx), 1)yy1 <-matrix(yy, length(yy), 1)final <-cbind(xx1, yy1)pred <- model |>predict(final)pred <- pred$.predpred <-matrix(pred, dim_val[1], dim_val[2])fig <-plot_ly(iris, x =~Sepal.Width, y =~Sepal.Length, z =~Petal.Width ) |>add_markers(size =5) |>add_surface(x=xrange, y=yrange, z=pred, alpha =0.65, type ='mesh3d', name ='pred_surface')fig
Übungsaufgabe
Optionale swirl-Lektionen zur Vertiefung
Kurs DSB-04-Datenvisualisierung mit ggplot2
L13-Plots kombinieren
L14-Karten erstellen mit ggplot2
L15-Umwandlung zur interaktiven plotly_Grafik
L16-plotly Objekte besser verstehen
Übungsskripte
Schauen Sie sich das VL-begleitende R Skript an und experimentieren Sie mit den Einstellungen: DS1_W12_Vorlesungsskript_ggplot2_Erweiterungen_Karten.R
Fallstudien
Sie sind jetzt so weit, …
..dass Sie versuchen können, mindestens eine statische und eine dynamische Karte zu Ihrer Fallstudie zu erstellen (letzteres z.B. über die Umwandlung der ggplot2 Karte zu einem plotly Objekt oder über die Erstellung einer leaflet Karte).