Suche…


Einführung

Siehe auch E / A für geografische Daten

Grundlegende Kartenerstellung mit map () aus den Paketkarten

Die Funktion map() aus den Package- maps bietet einen einfachen Ausgangspunkt zum Erstellen von Maps mit R.

Eine grundlegende Weltkarte kann wie folgt gezeichnet werden:

require(maps)
map()

Geben Sie hier die Bildbeschreibung ein

Die Farbe der Kontur kann geändert werden, indem der Farbparameter col entweder auf den Zeichennamen oder den Hexadezimalwert einer Farbe gesetzt wird:

require(maps)
map(col = "cornflowerblue")

Geben Sie hier die Bildbeschreibung ein

Landmassen mit der Farbe zu füllen col wir einstellen können fill = TRUE :

require(maps)
map(fill = TRUE, col = c("cornflowerblue"))

Geben Sie hier die Bildbeschreibung ein

Ein Vektor mit beliebiger Länge kann an col wenn auch fill = TRUE gesetzt ist:

require(maps)
map(fill = TRUE, col = c("cornflowerblue", "limegreen", "hotpink"))

Geben Sie hier die Bildbeschreibung ein

Im obigen Beispiel werden Farben aus col beliebig Polygonen in der Karte zugewiesen, die Regionen darstellen, und Farben werden wiederverwendet, wenn weniger Farben als Polygone vorhanden sind.

Wir können die Farbkodierung auch verwenden, um eine statistische Variable darzustellen, die optional in einer Legende beschrieben werden kann. Eine als solche erstellte Karte wird als "Choroplet" bezeichnet.

Das folgende Choropleth-Beispiel legt das erste Argument von map() , bei dem es sich bei der database um "county" und "state" , um die Arbeitslosigkeit mithilfe von Daten aus den integrierten Datensätzen unemp und county.fips während die unemp county.fips überlagert werden:

require(maps)
if(require(mapproj)) {    # mapproj is used for  projection="polyconic"
  # color US county map by 2009 unemployment rate
  # match counties to map using FIPS county codes
  # Based on J's solution to the "Choropleth Challenge"
  # Code improvements by Hack-R (hack-r.github.io)
  
  # load data
  # unemp includes data for some counties not on the "lower 48 states" county
  # map, such as those in Alaska, Hawaii, Puerto Rico, and some tiny Virginia
  #  cities
  data(unemp)
  data(county.fips)
  
  # define color buckets
  colors = c("paleturquoise", "skyblue", "cornflowerblue", "blueviolet", "hotpink", "darkgrey")
  unemp$colorBuckets <- as.numeric(cut(unemp$unemp, c(0, 2, 4, 6, 8, 10, 100)))
  leg.txt <- c("<2%", "2-4%", "4-6%", "6-8%", "8-10%", ">10%")
  
  # align data with map definitions by (partial) matching state,county
  # names, which include multiple polygons for some counties
  cnty.fips <- county.fips$fips[match(map("county", plot=FALSE)$names,
                                      county.fips$polyname)]
  colorsmatched <- unemp$colorBuckets[match(cnty.fips, unemp$fips)]
  
  # draw map
  par(mar=c(1, 1, 2, 1) + 0.1)
  map("county", col = colors[colorsmatched], fill = TRUE, resolution = 0,
      lty = 0, projection = "polyconic")
  map("state", col = "white", fill = FALSE, add = TRUE, lty = 1, lwd = 0.1,
      projection="polyconic")
  title("unemployment by county, 2009")
  legend("topright", leg.txt, horiz = TRUE, fill = colors, cex=0.6)
}

Geben Sie hier die Bildbeschreibung ein

50 Landeskarten und erweiterte Choroplethen mit Google Viz

Eine häufig gestellte Frage ist, wie man räumlich getrennte geografische Regionen auf derselben Karte nebeneinander stellt (kombiniert), wie im Fall eines Choropleths, der alle 50 amerikanischen Staaten beschreibt (das Festland mit Alaska und Hawaii nebeneinander).

Das Erstellen einer attraktiven Karte mit 50 Zuständen ist beim Einsatz von Google Maps einfach. Zu den Schnittstellen der Google-API gehören die Pakete googleVis , ggmap und RgoogleMaps .

require(googleVis)

G4 <- gvisGeoChart(CityPopularity, locationvar='City', colorvar='Popularity',
                   options=list(region='US', height=350, 
                                displayMode='markers',
                                colorAxis="{values:[200,400,600,800],
                                 colors:[\'red', \'pink\', \'orange',\'green']}")
) 
plot(G4)

Choroplethen

Die Funktion gvisGeoChart() erfordert weit weniger Codierung, um einen Choroplet zu erstellen, im Vergleich zu älteren Mapping-Methoden wie map() aus den Package- maps . Der colorvar Parameter ermöglicht das einfache Einfärben einer statistischen Variablen auf einer durch den locationvar Parameter festgelegten Ebene. Die verschiedenen Optionen übergeben options als Liste ermöglichen die Anpassung von Details der Karte wie Größe ( height ), Form ( markers ) und Farbcodierung ( colorAxis und colors ).

Interaktive Kartenpläne

Das Paket enthält mehrere Arten von interaktiven plotly , einschließlich Karten. Es gibt mehrere Möglichkeiten, eine Karte in plotly zu erstellen. plot_ly() Sie die Kartendaten entweder selbst an (über plot_ly() oder ggplotly() ), verwenden Sie die "native" Zuordnungsfunktion von plot_geo() über plot_geo() oder plot_mapbox() ) oder auch eine Kombination aus beiden. Ein Beispiel für die eigene Bereitstellung der Karte wäre:

library(plotly)
map_data("county") %>%
    group_by(group) %>%
    plot_ly(x = ~long, y = ~lat) %>%
    add_polygons() %>%
    layout(
        xaxis = list(title = "", showgrid = FALSE, showticklabels = FALSE),
        yaxis = list(title = "", showgrid = FALSE, showticklabels = FALSE)
    )

Geben Sie hier die Bildbeschreibung ein

Für eine Kombination beider Ansätze tauschen Sie plot_ly() für plot_geo() oder plot_mapbox() im obigen Beispiel aus. Weitere Beispiele finden Sie im ausführlichen Buch .

Das nächste Beispiel ist ein "streng nativer" Ansatz, bei dem das Attribut layout.geo verwendet wird, um die Ästhetik und die Zoomstufe der Karte festzulegen . Es verwendet auch die Datenbank world.cities aus maps , um die brasilianischen Städte zu filtern und sie über der "nativen" Karte zu zeichnen.

Die poph : poph ist ein Text mit der Stadt und ihrer Bevölkerung (was beim Mauszeiger angezeigt wird); q ist ein geordneter Faktor aus dem Quantil der Bevölkerung. ge hat Informationen für das Layout der Karten. Weitere Informationen finden Sie in der Paketdokumentation .

library(maps)
dfb <- world.cities[world.cities$country.etc=="Brazil",]
library(plotly)
dfb$poph <- paste(dfb$name, "Pop", round(dfb$pop/1e6,2), " millions")
dfb$q <- with(dfb, cut(pop, quantile(pop), include.lowest = T))
levels(dfb$q) <- paste(c("1st", "2nd", "3rd", "4th"), "Quantile")
dfb$q <- as.ordered(dfb$q)

ge <- list(
  scope = 'south america',
  showland = TRUE,
  landcolor = toRGB("gray85"),
  subunitwidth = 1,
  countrywidth = 1,
  subunitcolor = toRGB("white"),
  countrycolor = toRGB("white")
)

plot_geo(dfb, lon = ~long, lat = ~lat, text = ~poph,
    marker = ~list(size = sqrt(pop/10000) + 1, line = list(width = 0)),
    color = ~q, locationmode = 'country names') %>%
layout(geo = ge, title = 'Populations<br>(Click legend to toggle)')

Dies ist eine Momentaufnahme

Dynamische HTML-Karten mit Broschüre erstellen

Leaflet ist eine Open-Source-JavaScript-Bibliothek zum Erstellen dynamischer Karten für das Web. RStudio schrieb R Bindungen für Leaflet, erhältlich durch sein leaflet - htmlwidgets Paket , mit eingebauter htmlwidgets . Prospektkarten lassen sich gut in die Ökosysteme RMarkdown und Shiny integrieren .

Die Schnittstelle wird verrohrt , mit einer leaflet() Funktion , um eine Karte und Folgefunktionen hinzuzufügen (oder zu entfernen) Kartenebenen zu initialisieren. Es gibt viele Arten von Ebenen, von Markern mit Popups bis hin zu Polygonen zum Erstellen von Choroplethenkarten. Auf Variablen, die in dem data.frame an leaflet() werden, wird über Funktionsstil ~ quotation zugegriffen.

So state.name state.center Datasets state.name und state.center :

library(leaflet)

data.frame(state.name, state.center) %>% 
    leaflet() %>% 
    addProviderTiles('Stamen.Watercolor') %>% 
    addMarkers(lng = ~x, lat = ~y, 
               popup = ~state.name, 
               clusterOptions = markerClusterOptions())
Screenshot der Flugblattkarte (Screenshot; klicken Sie für eine dynamische Version.)

Dynamische Prospektkarten in glänzenden Anwendungen

Das Merkblatt - Paket ist so ausgelegt , um mit glänzenden integerate

Im ui rufen Sie leafletOutput() und in dem Server , den Sie anrufen renderLeaflet()

library(shiny)
library(leaflet)

ui <- fluidPage(
    leafletOutput("my_leaf")
)

server <- function(input, output, session){
    
    output$my_leaf <- renderLeaflet({
        
        leaflet() %>%
            addProviderTiles('Hydda.Full') %>%
            setView(lat = -37.8, lng = 144.8, zoom = 10)
        
    })
    
}

shinyApp(ui, server)

Reaktive Eingaben, die sich auf den Ausdruck renderLeaflet auswirken, renderLeaflet jedoch, dass die gesamte Map jedes Mal neu gezeichnet wird, wenn das reaktive Element aktualisiert wird.

Um eine Karte zu ändern, die bereits läuft, sollten Sie die Funktion leafletProxy() verwenden.

Normalerweise verwenden Sie leaflet , um die statischen Aspekte der Karte zu erstellen, und leafletProxy , um die dynamischen Elemente zu verwalten, zum Beispiel:

library(shiny)
library(leaflet)

ui <- fluidPage(
    sliderInput(inputId = "slider", 
                label = "values",
                min = 0,
                max = 100,
                value = 0,
                step = 1),
    leafletOutput("my_leaf")
)

server <- function(input, output, session){
    set.seed(123456)
    df <- data.frame(latitude = sample(seq(-38.5, -37.5, by = 0.01), 100),
                     longitude = sample(seq(144.0, 145.0, by = 0.01), 100),
                     value = seq(1,100))
        
    ## create static element
    output$my_leaf <- renderLeaflet({
        
        leaflet() %>%
            addProviderTiles('Hydda.Full') %>%
            setView(lat = -37.8, lng = 144.8, zoom = 8)
        
    })
    
    ## filter data
    df_filtered <- reactive({
        df[df$value >= input$slider, ]
    })
    
    ## respond to the filtered data
    observe({

        leafletProxy(mapId = "my_leaf", data = df_filtered()) %>%
            clearMarkers() %>%   ## clear previous markers
            addMarkers()
    })
    
}

shinyApp(ui, server)

Geben Sie hier die Bildbeschreibung ein



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow