Ich möchte meine Daten mit Landschaftskarten kombinieren!
38.1 Deutschland
Wir verwenden zum plotten das Zusatzpaket sf, mit dessen Hilfe shape geopackages verarbeitet werden können. Das zu diesem Format passende Kartenmaterial wird vom Bundesamt für Kartographie und Geodäsie kostenfrei zur Verfügung gestellt, siehe https://gdz.bkg.bund.de/index.php/default/digitale-geodaten/verwaltungsgebiete.html. Als Starterpaket ist der Datensatz der Verwaltungsgebiete VG2500 zu empfehlen. Dieser enthält die Verwaltungsebenen vom Staat bis zu den Kreisen mit den jeweiligen Grenzen:
VG2500_STA - Staat
VG2500_LAN - Bundesländer
VG2500_RBZ - Regierungsbezirke
VG2500_KRS - Kreise
Dabei besteht jeder Kartensatz aus den Unterdateien
*.shp - Shape-Datei. Diese lesen wir in R ein
*.shx - Geometrieindex
*.prj - Projektion
*.dbf - Attribute
*.cpg - Zeichensatz
38.1.1 Kartendaten einlesen
Sind die Kartendaten heruntergeladen, müssen alle Dateien (nicht nur die .shp Datei) mit Dateinamen VG2500_KRS (beispielhaft für Kreise) in den R-Studio-Projektordner gelegt werden. Ich persönlich habe dort den Unterordner data erstellt, von dem aus ich die Daten einlese. Der Import erfolgt mit der Funktion read_sf() wie folgt:
# Paket aktivierenlibrary(sf)
## Linking to GEOS 3.12.2, GDAL 3.9.0, PROJ 9.4.1; sf_use_s2() is TRUE
# Lade Kartendaten der Bundesländerbundeslaender <-read_sf("data/VG2500_LAN.shp")# anschauenhead(bundeslaender)
Die in den Datensätzen für uns interessanten Variablen sind ARS (Amtlicher Regionalschlüssel), AGS (Amtlicher Gemeindeschlüssel) und GEN (geographischer Name), denn über diese können die entsprechenden Flächen der Karte manipuliert werden. Die eigentlichen Positionsangaben sind in der Variable geometry enthalten.
38.1.2 Karten erzeugen
Erzeugen wir zunächst eine grobe Deutschlandkarte der Bundesländer mit ggplot(). Hierfür kann die Funktion geom_sf() genutzt werden.
library(ggplot2)# Hier wird eine weiße Karte der Bundesländer# mit schwarzen Grenzen und dünner Linie gezeichnetggplot(bundeslaender) +geom_sf(fill="white", color="black", linewidth=0.3) +theme_void()
# Hier eine Karte der Kreiseggplot(kreise) +geom_sf(fill="white", color="black", linewidth=0.3) +theme_void()
38.1.3 Kacheln füllen
Auf den Seiten des Bundesinstituts für Bau-, Stadt-, und Raumforschung können interessante Kennzahlen heruntergeladen werden, siehe https://www.inkar.de. Die Daten aus Tabelle Bevoelkerung2022.txt stammen aus diesem riesigen Datensatz und beschreiben die Bevölkerungszahlen der Kreise von 2021 und 2022. Diese Daten sollen genutzt werden, um die Kartenkacheln einzufärben.
In der Spalte Kennziffer der Tabelle sind die amtlichen Regionalschlüssel enthalten. Diese stimmen mit den ARS und AGS Kennziffern aus den Kartendaten überein. Wir können also über diese Variable die Datensätze zusammenführen.
Beachten Sie, dass in der ersten Spalte führende Nullen angegeben sind. Um sicherzustellen, dass die führenden Nullen beim Einlesen in R erhalten bleiben, muss die Option colClasses="character" verwendet werden.
# Datenniveaus anpassen, weil ja alles als# "character" eingelesen wurdeEinwohner$Kennziffer <-factor(Einwohner$Kennziffer)Einwohner$Raumeinheit <-factor(Einwohner$Raumeinheit)Einwohner$Aggregat <-factor(Einwohner$Aggregat)Einwohner$J2021 <-as.numeric(Einwohner$J2021)Einwohner$J2022 <-as.numeric(Einwohner$J2022)
In einer neuen Variable Diff soll die prozentuale Veränderung der Bevölkerungsanzahl von 2021 nach 2022 gespeichert werden.
Jetzt können wir die beiden Datensätze mittels left_join() über die Variablen Kennziffer und ARSzusammenführen.
library(dplyr)# Einwohnerzahlen und Kartenmaterial verbindenkreise2 <-left_join(kreise, Einwohner, join_by(ARS==Kennziffer))
Das neue Objekt kreise2 kann nun zum Plotten verwendet werden. Hierbei werden die Kartensegmente in Abhängigkeit zur prozentualen Bevölkerungsveränderung eingefärbt. Um einen schönen Farbverlauf zu erzeugen, nutzen wir die muted() Funktion aus dem scales Paket.
library(scales)ggplot(kreise2) +geom_sf(aes(fill=Diff),linewidth =0, alpha=0.9) +# Färbefarben festlegenscale_fill_gradient2(low=muted("red"), mid="lightyellow", high=muted("green"), midpoint=0, na.value="black") +coord_sf() +# Legende der Färbungguides(fill=guide_colorbar(barwidth=0.5, barheight=10, title="Veränderung in %"))
Die Karten können auch kombiniert werden. So könnten wir unserer Karte noch die Bundsländergrenzen hinzufügen.
# nochmal der selbe Plotggplot(kreise2) +geom_sf(aes(fill=Diff),linewidth =0, alpha=0.9) +# Färbefarben festlegenscale_fill_gradient2(low=muted("red"), mid="lightyellow", high=muted("green"), midpoint=0, na.value="black") +coord_sf() +# Legende der Färbungguides(fill=guide_colorbar(barwidth=0.5, barheight=10, title="Veränderung in %")) +# Grenzen der Bundesländer drüberlegengeom_sf(data=bundeslaender, fill=NA, color="black", linewidth=0.3)
## Coordinate system already present. Adding new coordinate system, which will
## replace the existing one.
große Schlarmann, J. (2025b). trainingslageR. Ein Übungsbuch für R-Einsteiger*innen und Fortgeschrittene. Hochschule Niederrhein. https://www.produnis.de/trainingslager