Landkarten in R

Karten, Routen und Animationen

Karten
R
Author

Markus Burkhardt

Published

03.03.2023

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:

library(rnaturalearth) # Offene Dantebank zu Kontintental- Länder und Stadtgrenzen.
library(tmap) # Zeichnung von Landkarten
library(sf) # Simple Features: Geometriepaket

Umrisskarte

Nun zeichnen wir zuerst eine Umrisskarte von Deutschland.

# Ermittle die Koordinaten der Grenzen von Deutschland
de <- ne_countries(country = "Germany") 
#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)
FBL1_coord <- read_delim(
  "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:
FBL1_22_sf <- st_as_sf(FBL1_coord[FBL1_coord$year == 18, ], coords = c("x","y"), crs = st_crs(de)$proj4string)

# 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)