3 Statische Karten

Am häufigsten werden geographische Daten mit Hilfe von statischen Karten dargestellt, die als .png oder .pdf Datei abgespeichert werden können. Ursprünglich konnten in R nur auf diese Art Daten visualisiert werden, doch durch die Entwicklung neuer Pakete, allen voran sp, wurden neue Möglichkeiten zur Darstellung dieser Daten geschaffen. Doch trotz neuer Methoden wie interaktiven Karten sind statische Karten auch heute noch das Steckenpferd der Datenvisualisierung in R.

3.1 tmap

Die schnellste Möglichkeit zur Erstellung von Karten in R ist die Verwendung der plot() Funktion, mit der Vektor- und Rasterdaten simplistisch dargestellt werden können. Durch die Verwendung mehrerer Argumente, wie beispielsweise col, können die Graphiken gestylt werden, um mehr Informationen zu übermitteln. Eine weitere Möglichkeit stellt das Paket grid dar, mit dem mehr Kontrolle möglich ist. Ein Paket das speziell zur Illustration von Geodaten entwickelt wurde, ist tmap. Dieses hat eine kompakte Syntax, ähnlich der von ggplot2. Des Weiteren können statische Karten durch die Verwendung des Befehls tmap_mode() schnell in interaktive Karten umgewandelt werden und umgekehrt. Außerdem werden die meisten geographischen Klassen als input akzeptiert, im Vergleich zu anderen Paketen, auch raster Daten.

Wie bereits erwähnt ähnelt die Syntax von tmap der von ggplot2. Dies beinhaltet eine strikte Trennung zwischen den Daten und der Ästhetik. Zu Beginn wird tm_shape() ein Datensatz übergeben, gefolgt von ein oder mehreren Ebenen, die die Art der Darstellung definieren. Dazu zählen beispielhaft tm_fill() und tm_dots(), um Daten als Polygone beziehungsweise Punkte zu plotten.

Einfaches Beispiel

Figure 3.1: Einfaches Beispiel

Das hier übergebene Objekt bavaria hat die Klasse sf und stellt die einzelnen Städte und Landkreise Bayerns dar. tm_fill() füllt die einzelnen Polygone, wodurch ein gefüllter Grundriss Bayerns entsteht . tm_borders() zeichnet die Grenzen der einzelnen Polygone und tm_polygons() vereint die beiden Funktionen und stellt beides gleichzeitig dar. Durch den + Operator können weitere Ebene hinzugefügt werden, mit denen verschiedene Arten von geographischen Daten visualisiert werden können.

3.2 Karten Objekte

Mit tmap können Objekte nicht nur geplotted werden, sondern auch als Objekte der Klasse "tmap".

## [1] "tmap"

Das gespeicherte Objekt kann so einfach erweitert werden, oder zu einem späteren Zeitpunkt in der Konsole aufgerufen werden. Des Weiteren können zu dem Objekt weitere Ebenen mit tm_shape() hinzugefügt werden, wodurch mehrere Karten zu einer kombiniert werden können. Im folgenden Codebeispiel wird auf dem obigen Code, der ein Höhenraster von Europa darstellt, aufgebaut. Dabei werden zunächst die Grenzlinien der einzelnen Staaten hinzugefügt, gefolgt von allen Städten mit über einer Million Einwohnern.

Verwendung mehrerer Ebenen

Figure 3.2: Verwendung mehrerer Ebenen

Durch das Speichern der einzelnen Karten als Objekte können diese auch mit Hilfe der Funktion tmap_arrange() neben- oder übereinander dargestellt werden.

Der Nutzer ist nicht limitiert in der Anzahl an Ebenen, die er hinzufügen kann. Dabei sollte jedoch beachtet werden, dass bei zu vielen Informationen der Betrachter schnell überfordert sein kann.

3.3 Ästhetik

Bei den bisherigen Plots wurden die Standard Einstellungen von tmap verwendet. Zur Gestaltung visuell ansprechender Karten können diese überschrieben werden. Dabei gibt es zwei Möglichkeiten: - Konstante Ästhetik - Ästhetik, die sich mit Variablenausprägung ändert Im Vergleich zu ggplot2 wird keine Helferfunktion (aes()) verwendet, um die Gestaltung der Karte zu individualisieren. Stattdessen werden die Argumente direkt übergeben. Zu den nützlichsten Argumenten zählt die Füllfarbe (col), die Transparenz (alpha), die Strichstärke (lwd) und die Linienart (lty).

Verwendung verschiedener Argumente

Figure 3.3: Verwendung verschiedener Argumente

Ein weiterer Unterschied zu ggplot2 besteht darin, dass die Variablen Namen als character übergeben werden müssen und der $ Operator somit nicht verwendet werden kann.

## Error: Fill argument neither colors nor valid variable name(s)

Die gewünschte Grafik wird mit folgendem Code erreicht:

Bevölkerungsentwicklung in Bayern von 2011 bis 2015

Figure 3.4: Bevölkerungsentwicklung in Bayern von 2011 bis 2015

Das midpoint Argument wird hier verwendet, um den Wert 0 als natürlichen Mittelpunkt zu verwenden. In der resultierenden Karte ist zu erkennen, dass die Bevölkerung im Norden Bayerns zurückgeht, während vor allem um München herum die Bevölkerung stark ansteigt.
Karte in base R

Figure 3.5: Karte in base R

Am Beispiel der letzten Karten ist zu sehen, dass tmap automatisch eine Farbpalette und Intervalle auswählt. Um andere Intervalle zu verwenden, kann entweder dem breaks Argument manuelle Grenzen übergeben werden oder mit n die Anzahl der bins festgelegt werden.

Illustration des breaks und n Arguments

Figure 3.6: Illustration des breaks und n Arguments

Ein Alternative dazu ist das style Argument. Dadurch kann die Klassenbildung mit Hilfe von Algorithmen erfolgen. Unter anderem können folgende styles übergeben werden:

- `style = pretty`: Rundet Intervallgrenzen zu ganzen Nummern. Ist die Standardeinstellung
- `style = equal`: Teilt die Variable in Intervalle von gleicher Länge auf.
   Sollte nur benutzt werden, wenn die Variable gleichverteilt ist.
- `style = quantile`: Teilt die Variable in Quantile auf.
   Somit sind in jedem Intervall gleich viele Beobachtungen. 
- `style = jenks`: Identifiziert Gruppen mit ähnlichen Werten und
   maximiert den Unterschied zwischen ihnen.
- `style = cont`: Stellt viele Farben über eine kontinuierliche Palette dar.
- `style = cat`: Färbt bei kategorialen Daten jede Kategorie individuell ein.

Weitere Möglichkeiten sind cat, fixed, sd, kmeans, hclust, bclust, und fisher.

Arbeitslosenquote in Bayern und Verteilung von Städten und Landkreisen

Figure 3.7: Arbeitslosenquote in Bayern und Verteilung von Städten und Landkreisen

Eine letzte Möglichkeit, um das Aussehen einer Karte zu beeinflussen, besteht in der Farbwahl der einzelnen Klassen. Der Nutzer kann dies über das Argument palette. Diesem kann der Name einer Palette aus dem RColorBrewer oder Viridis Paket übergeben werden. Soll die Reihenfolge der Palette umgedreht werden, kann zu Beginn des characters ein - hinzugefügt werden.

Umdrehen einer Palette

Figure 3.8: Umdrehen einer Palette

Bei den Paletten aus den beiden Paketen kann zwischen drei Arten von Paletten unterschieden werden: - Sequentielle Paletten: Folgen einem Farbverlauf von hell zu dunkel. Sollten für stetige Variablen verwendet werden. - Divergierende Paletten: Folgen einem Farbverlauf von dunkel zu hell, zu dunkel. Sollten für stetige Variablen mit einem natürlichen Mittelpunkt (midpoint) verwendet werden. - Kategoriale Paletten: Leicht unterscheidbare Farben, ideal für kategoriale Daten. Alternativ kann auch eine eigene Palette übergeben werden, hierfür könnten HEX-Codes verwendet werden. Bei der Farbwahl sollte auf weiteres geachtet werden: Farben übertragen Gefühle. Beispielhaft wird rot mit negativen Sachen assoziiert, während grün mit positiven Dingen in Verbindung gebracht wird. Dieses Beispiel kann auch auf geographische Merkmale erweitert werden. Grün steht für Wälder und blau für Gewässer. Außerdem sollte bei Verwendung eine Palette klar sein, welche Farbe für niedrigere beziehungsweise höhere Werte steht. Damit eine möglichst breite Masse an Menschen eine Karte interpretieren kann, sollte wenn möglich auch darauf geachtet werden, dass farbenblinde Menschen die Unterschiede zwischen den Klassen identifizieren können.
Sequentielle, divergierende und kategoriale Palette

Figure 3.9: Sequentielle, divergierende und kategoriale Palette

3.4 Layouts

Außer der Möglichkeit, die Karte an sich zu verändern, existiert die Möglichkeit andere Elemente der Grafik zu editieren. Mit Hilfe von Funktionen wie tm_compass(), tm_scale_bar(), tm_logo(), tm_style() und tm_layout lassen sich Karten um die verschiedensten Elemente erweitern. Mit Hilfe der ersten drei dieser Funktion lassen sich ein Kompass, eine Maßstabsleiste und Bilder hinzufügen.

Bayernkarte mit zusätzlichen Elementen

Figure 3.10: Bayernkarte mit zusätzlichen Elementen

Mit Hilfe von tm_layout() kann eine Vielzahl an Eigenschaften der Karten geändert werden. So kann ein Titel oder eine Hintergrundfarbe hinzugefügt werden, die Skalierung geändert werden oder der Rahmen und die Legende entfernt werden.

Einige Layout Einstellungen

Figure 3.11: Einige Layout Einstellungen

Außerdem können Schriftart und -größe geändert werden, sowie mit Hilfe visueller Filter, beispielsweise Sepia oder Schwarz-Weiß, das Aussehen weiter angepasst werden. Durch Verwendung von tm_style() können vordefinierte Stile verwendet werden, um Karten zum Beispiel einen Old-School-Look zu geben oder sie für Farbenblinde zu optimieren. Einen Überblick über die verfügbaren Stile bietet die Funktion tmap_style_catalog(), die im aktuellen Arbeitsverzeichnis einen Ordner anlegt, der verschiedene Karten enthält.

Klassicher und farbenblinder Stil

Figure 3.12: Klassicher und farbenblinder Stil

3.5 Inset maps

Manchmal können nicht alle Informationen effektiv mit nur einer Karte dargestellt werden, beispielsweise um zusätzliche Informationen zu übermitteln. Mit Hilfe der print() und viewport() Funktionen können mehrere kleinere Karten zu einer großen zusammengefügt werden. In dem nachfolgenden Beispiel sind die Städte und Gemeinden des Landkreises Rosenheim dargestellt. Da möglicherweise nicht alle Betrachter wissen, wo sich der Landkreis befindet, wird noch eine Bayern Karte mit einer bounding box um den Landkreis herum hinzugefügt.

Städte und Gemeinden des Landkreis Rosenheim

Figure 3.13: Städte und Gemeinden des Landkreis Rosenheim

Ein weiteres Anwendungsgebiet dieser Art von Karten ist die Darstellung von Regionen, die weit voneinander entfernt sind. Im folgenden Beispiel werden alle 50 Staaten der USA in einer Grafik dargestellt, unter Berücksichtigung der Größen der einzelnen Staaten. Da Hawaii und Alaska zu weit von den restlichen 48 Staaten entfernt sind, wäre eine einzelne Karte nicht die beste Lösung, weswegen drei Karten erstellt und zusammengefügt werden. Zuerst wird die Projektion der 48 Staaten in eine equal area projection geändert, die anderen beiden Datensätze haben diese bereits.

Um die Karten möglichst getreu ihrer Größe darzustellen, wird für jede der drei Karten die Differenz zwischen dem größten und kleinsten y-Wert berechnet. Dafür werden bounding boxes verwendet. Anschließend werden die Faktoren berechnet, um die die Karten von Alaska und Hawaii größer beziehungsweise kleiner sind, als die der restlichen 48 Staaten.

Anschließend werden die drei Karten erstellt. legend.is.portrait = FALSE sorgt dafür, dass die Legende horizontal angeordnet wird, anstatt von vertikal.

Mit grid.layout wird ein Fenster mit zwei Reihen und einer Spalte definiert. Die Höhe der einzelnen Reihen hängt vom Verhältnis der “Höhe” von Alaska und den 48 Staaten ab. Danach werden die drei Karten eingefügt, bei Hawaii hängt die “Höhe” wieder vom Verhältnis zu den 48 Staaten ab. Mit grid.lines werden noch Linien hinzugefügt um die Karten besser voneinander abzutrennen.

Einwohnerzahlen der Bundesstaaten in den USA

Figure 3.14: Einwohnerzahlen der Bundesstaaten in den USA

3.6 Facettierte und animierte Karten

Neben der Möglichkeit verschiedene Elemente der Karten basierend auf einer Variable zu ändern, können Karten basierend auf einer Variable in mehrere Karten unterteilt werden. Was in ggplot2 mit facet_wrap() gemacht wird, wird in tmap mit tm_facets() erledigt. Soll eine zeitliche Variable dargestellt werden, geht dies schlecht mit einer Karte, da sich die Geometrien häufig überlappen würden. Besonders in diesen Fällen ist die Verwendung facettierter Karten sinnvoll. Die Funktion hat fünf wichtige Argumente:

- `by`: Nach welcher Variable soll aufgeteilt werden?
- `nrow / ncol`: Die Anzahl der Zeilen beziehungsweise Spalten der Facetten
- `free.cords`: Soll jede einzelne Karte ein eigenes Koordinatensystem haben?
- `along`: Nach welcher Variable soll animiert werden?

Ein Problem dieser Art von Karten ist, dass mit mehr Ausprägungen einer Variable mehr Karten erstellt werden, wodurch es schnell unübersichtlich wird und Unterschiede zwischen den einzelnen Karten nur noch sehr schwer zu erkennen sind. Dieses Problem wird von animierten Karten gelöst. In Papern können diese nicht dargestellt werden, allerdings werden heutzutage immer mehr Informationen online abgerufen, was dieses Problem mindert. Der Autor eines Artikels kann alternativ auch einen Link zu der animierten Karte in seinen Text einbauen. Wie bereits erwähnt, kann mit dem Argument along der Funktion tm_facets() eine animierte Karte erstellt werden. Mit Hilfe der Funktion tmap_animation() kann die erstellte Animation als GIF Datei abgespeichert werden, allerdings wird dafür die Software ImageMagick benötigt. Diese kann mit Hilfe des installr Pakets installiert werden. (installr::install.imagemagick()) Die folgende Animation stellt ebenfalls den durchschnittlichen Preis eines Pfunds Honing in US$ dar, dieses Mal über einen Zeitraum von 15 Jahren. Mittels delay kann angegeben werden, wieviele Millisekunden zwischen den einzelnen Bildern vergehen sollen. Mit width und height können noch die Maße in Pixel angegeben werden, mit loop, ob das GIF eine Endlosschleife ist, oder nach einer bestimmten Anzahl an Runden endet.

Animierte Karte

Figure 3.15: Animierte Karte

References

Lovelace, Robin, Jakub Nowosad, and Jannes Muenchow. 2019. Geocomputation with R. CRC Press.