library(rnaturalearth) # Offene Dantebank zu Kontintental- Länder und Stadtgrenzen.
library(tmap) # Zeichnung von Landkarten
library(sf) # Simple Features: Geometriepaket
Lernziele in R
In meinem Beitrag Reise um zu Gewinnen haben wir eine illustrative Landkarte mit statistischen Informationen erstellt. Hier zeige ich, wie das geht.
Pakete
Für unsere Grafiken benötigen wir folgende Pakete:
rnaturalearth
von South, 2023tmap
von Tennekes, 2018sf
von Pebesma, 2018
Umrisskarte
Nun zeichnen wir zuerst eine Umrisskarte von Deutschland.
# Ermittle die Koordinaten der Grenzen von Deutschland
<- ne_countries(country = "Germany")
de #de <- st_as_sf(de)
# Zeichnen eine Karte von Deutschland
tm_shape(de) +
tm_fill(col = "moccasin") +
tm_borders(col = "black")
Städte
Die Städte zeichnen wir mit Hilfe ihrer Koordinaten (Geolocation) ein. Im Beitrag Reise um zu Gewinnen haben wir bereits eine Möglichkeit kennen gelernt, um den Geocode von Städten zu ermitteln. Im Datensatz FBL1_coord.csv
sind die Daten der 1. Bundesliga mit den Koordinaten der Städte enthalten:
library(readr)
<- read_delim(
FBL1_coord "https://www-user.tu-chemnitz.de/~burma/blog_data/FBL1_coord.csv",
delim = ";", escape_double = FALSE,
locale = locale(decimal_mark = ",", encoding = "ISO-8859-1"),
trim_ws = TRUE)
head(FBL1_coord)
# A tibble: 6 x 9
tab games wins draw loss year city x y
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
1 1 30 17 11 2 63 Köln 6.96 50.9
2 2 30 13 13 4 63 Duisburg 6.76 51.4
3 3 30 16 7 7 63 Frankfurt 8.68 50.1
4 4 30 14 5 11 63 Dortmund 7.47 51.5
5 5 30 13 7 10 63 Stuttgart 9.18 48.8
6 6 30 11 10 9 63 Hamburg 10.0 53.6
Um die Städte einzuzeichnen müssen wir zunächst die Koordinaten in eine allgemeine Kodierung mit st_as_sf()
überfragen. Anschließend können wir die Städte einzeichnen.
# Koordinaten der Saison 2021/2022 auf das Zeichenfeld anpassen:
<- st_as_sf(FBL1_coord[FBL1_coord$year == 18, ], coords = c("x","y"), crs = st_crs(de)$proj4string)
FBL1_22_sf
# Einzeichnung der Städte in die Deutschlandkarte
tm_shape(de) +
tm_fill(col = "moccasin") +
tm_borders(col = "black") +
tm_shape(FBL1_22_sf) +
tm_dots(size = 1)
Weitere Informationen
Schließlich können wir noch die Distanz und die Anzahl der Siege und die Namen der Städte integrieren.
tm_shape(de) +
tm_fill(col = "moccasin") +
tm_borders(col = "black") +
tm_shape(FBL1_22_sf) +
tm_bubbles(size = "wins", col = "wins") +
tm_layout(legend.position = c("left", "bottom"), legend.outside = T) +
tm_text(text = "city", size = .8)