Ein Plot Schicht für Schicht aufbauen
Jetzt, da du tmap() etwas besser kennst, bauen wir deinen vorherigen Bevölkerungs-Plot schrittweise auf und nehmen ein paar Verbesserungen vor. Du startest mit einem tm_shape()-Layer, der die zu verwendenden Daten festlegt, und fügst dann einen tm_fill()-Layer hinzu, um deine Polygone anhand der Variable population einzufärben:
tm_shape(countries_spdf) +
tm_fill(col = "population")
Das vermutlich größte Problem am resultierenden Plot ist, dass die Farbskala wenig aussagekräftig ist: Die erste Farbe (sehr blasses Gelb) umfasst alle Länder mit weniger als 200 Millionen Einwohnern! Da die Farbskala zum tm_fill()-Layer gehört, nimmst du Anpassungen an dieser Skala in diesem Aufruf vor. In Kapitel 3 lernst du viel mehr über Farben, aber fürs Erste gilt: Das Argument style steuert, wie die Klassenunterteilungen gewählt werden.
Dein Plot braucht außerdem Ländergrenzen. Dafür kannst du einen tm_borders()-Layer hinzufügen, aber mach sie nicht zu dominant. Ein Braunton wäre vielleicht schön.
Der Vorteil räumlicher Objekte zeigt sich besonders, wenn du die Art des Plots wechselst. Probier außerdem einen Bubble-Plot, bei dem die Größe der Punkte der Bevölkerung entspricht. Mit ggplot2 müsstest du deine Daten dafür stark umformen. Mit tmap tauschst du einfach einen Layer aus.
Diese Übung ist Teil des Kurses
Geodaten in R visualisieren
Anleitung zur Übung
- Füge
style = "quantile"zutm_fill()hinzu. Dadurch werden die Klassen der Farbskala so gewählt, dass in jedem Intervall etwa gleich viele Beobachtungen liegen. - Füge im selben Plot einen
tm_borders()-Layer mitcol = "burlywood4"hinzu. - Erstelle einen neuen Plot wie den ersten, aber statt
tm_fill()fügst du einentm_bubbles()-Layer hinzu und setztsizeauf die Bevölkerung.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
library(sp)
library(tmap)
# Add style argument to the tm_fill() call
tm_shape(countries_spdf) +
tm_fill(col = "population") +
# Add a tm_borders() layer
# New plot, with tm_bubbles() instead of tm_fill()