5 Karten mit Shiny

Interaktive Karten können durch Popups deutlich mehr Informationen überliefern als statische Karten, doch auch sie haben ihre Limitationen:

- Es gibt nur ein fixes User Interface
- Es gibt Probleme bei der Darstellung großer Datensätze
- Die Verknüpfung der Karten mit anderen Graphen ist nur schwer möglich.

Eine Möglichkeit, um diese Probleme anzugehen, stellen Web Apps dar. Das Grundprinzip einer Web App besteht aus zwei Teilen:

1. Das User Interface: Was sieht der Benutzer? Dies beinhaltet die Karte(n),
Auswahlmöglichkeiten um die Karten zu gestalten, zusätzliche Grafiken, ...
2. Der Server: Auf dem Server findet die Berechnung basierend auf den Inputs
aus dem User Interface statt. Diesen Teil sieht der Benutzer nicht.

In R können diese Apps mit Hilfe des Pakets shiny entwickelt werden. Hierfür muss ein Skript mit Namen app.R erstellt werden, dass zwei Elemente enthält: ui und server. Alternativ können auch zwei Skripte ui.R und server.R erstellt werden. Im weiteren Verlauf wird von einem Skript, app.R, ausgegangen. Am Ende dieses Skriptes muss der Befehl shinyApp(ui = ui, server = server) stehen, damit die App gestartet werden kann.

Ein einfaches Beispiel für eine App mit den Paketen shiny und leaflet könnte wie folgt aussehen:

Zuerst werden die Pakete und der Honig Datensatz aus Kapitel 2 geladen:

Als erstes wird das User Interface definiert: Es wird eine fluidPage erstellt, damit sich die App anpasst, wenn das Fenster verkleinert oder vergrößert wird. Dann wird eine fluidRow hinzugefügt, in die drei column Elemente hinzugefügt werden, die jeweils einen selectInput enthalten. Eine column gibt an, wieviel Platz ein Element in der Breite einnimmt. Dafür wird das Fenster in 12 Spalten unterteilt, 4 nimmt also ein Drittel der Seite ein. Ein selectInput entspricht einer Combobox, also ein Eingabefenster bei dem aus mehreren Vorschlägen ausgewählt werden kann. multiple = FALSE sorgt dafür, dass maximal ein Vorschlag ausgewählt werden kann. Nach der ersten fluidRow wird eine zweite hinzugefügt, die einen leafletOutput enthält, also die Karte, auf der später alles dargestellt wird.

Anschließend muss der Server definiert werden. outmap$map definiert, was mit dem Objekt mit der outputId map geschehen soll. Die Funktion renderLeaflet wird verwendet, um eine Leaflet Karte zu rendern. Doch bevor die Karte gerendert werden kann, muss etwas Vorarbeit geleistet werden. Als erstes wird ein Teildatensatz erstellt, der alle Daten aus dem ausgewählten Jahr für die selektierte Variable enthält. Die von dem Benutzer ausgewählten Werte werden mit input$inputId abgerufen. In diesem Fall input$year, input$variable und input$palette. Diese haben immer die Klassen character, für das Jahr muss dieser Wert also in einen numerischen umgewandelt werden. Die Funktion colorNumeric wird für die Erstellung der Farbpalette verwendet, ehe ein Titel für die Legende erstellt wird und die Karte generiert wird. Mehr zu der Erstellung der Karte und des Leaflet Pakets in dem entsprechenden Kapitel.

Die resultierende App sieht wie folgt aus: Simple Shiny Applikation