Zoeken…


Invoering

Zie ook I / O voor geografische gegevens

Eenvoudig kaarten maken met map () uit de pakketkaarten

De functie map() uit het pakket maps een eenvoudige uitgangspunt voor het maken van kaarten met R.

Een eenvoudige wereldkaart kan als volgt worden getekend:

require(maps)
map()

voer hier de afbeeldingsbeschrijving in

De kleur van de omtrek kan worden gewijzigd door de kleurparameter col in te stellen op de tekennaam of hexadecimale waarde van een kleur:

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

voer hier de afbeeldingsbeschrijving in

Om landmassa's te vullen met de kleur in col kunnen we stellen fill = TRUE :

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

voer hier de afbeeldingsbeschrijving in

Een vector van elke lengte kan aan col worden geleverd wanneer fill = TRUE ook is ingesteld:

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

voer hier de afbeeldingsbeschrijving in

In het bovenstaande voorbeeld kleuren uit col worden willekeurig toegewezen aan veelhoeken in de kaart die gebieden en kleuren worden gerecycled als er minder kleuren dan veelhoeken.

We kunnen ook kleurcodering gebruiken om een statistische variabele weer te geven, die optioneel in een legenda kan worden beschreven. Een kaart die als zodanig is gemaakt, staat bekend als een "choropleth".

In het volgende choropleth-voorbeeld wordt het eerste argument van map() , dat database op "county" en "state" om de werkloosheid in te kleuren met behulp van gegevens uit de ingebouwde datasets unemp en county.fips terwijl de staatslijnen in wit overlappen:

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)
}

voer hier de afbeeldingsbeschrijving in

50 staatskaarten en geavanceerde Choropleths met Google Viz

Een veel voorkomende vraag is hoe fysiek gescheiden geografische regio's op dezelfde kaart naast elkaar kunnen worden geplaatst (gecombineerd), zoals in het geval van een choropleth die alle 50 Amerikaanse staten beschrijft (het vasteland met Alaska en Hawaii naast elkaar).

Het maken van een aantrekkelijke kaart met 50 staten is eenvoudig wanneer u Google Maps gebruikt. Interfaces naar de API van Google zijn de pakketten googleVis , ggmap en 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)

choropleth

De functie gvisGeoChart() vereist veel minder codering voor een choropleth te creëren ten opzichte van oudere mapping methoden, zoals map() uit het pakket maps . Met de parameter colorvar kan een statistische variabele eenvoudig worden colorvar , op een niveau dat wordt bepaald door de parameter locationvar . De verschillende opties doorgegeven aan options als een lijst laten aanpassen van de kaart's details zoals de grootte ( height ), de vorm ( markers ) en kleurcodering ( colorAxis en colors ).

Interactieve grafische kaarten

Het plotly pakket maakt vele soorten interactieve plots mogelijk, inclusief kaarten. Er zijn een paar manieren om een kaart in plotly . Geef de kaartgegevens zelf (via plot_ly() of ggplotly() ), gebruik de "native" toewijzingsmogelijkheden van plot_geo() via plot_geo() of plot_mapbox() ), of zelfs een combinatie van beide. Een voorbeeld van het zelf aanleveren van de kaart zou zijn:

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)
    )

voer hier de afbeeldingsbeschrijving in

Voor een combinatie van beide benaderingen plot_ly() voor plot_geo() of plot_mapbox() in het bovenstaande voorbeeld. Zie het overzichtelijke boek voor meer voorbeelden.

Het volgende voorbeeld is een "strikt native" benadering die het kenmerk layout.geo gebruikt om de esthetiek en het zoomniveau van de kaart in te stellen. Het maakt ook gebruik van de database world.cities van maps om de Braziliaanse steden te filteren en boven op de "native" kaart te plotten.

De belangrijkste variabelen: poph is een tekst met de stad en de bevolking (die wordt weergegeven bij muisaanwijzer); q is een geordende factor uit het kwantiel van de populatie. ge heeft informatie voor de lay-out van de kaarten. Zie de pakketdocumentatie voor meer informatie.

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)')

Dit is een momentopname

Dynamische HTML-kaarten maken met folder

Leaflet is een open-source JavaScript-bibliotheek voor het maken van dynamische kaarten voor het web. RStudio schreef R-bindingen voor Leaflet, beschikbaar via het leaflet pakket , gebouwd met htmlwidgets . Folderkaarten integreren goed met de ecosystemen RMarkdown en Shiny .

De interface is doorverbonden met behulp van een leaflet() -functie om een kaart te initialiseren en daaropvolgende functies die kaartlagen toevoegen (of verwijderen). Vele soorten lagen zijn beschikbaar, van markeringen met pop-ups tot polygonen voor het maken van choropleth-kaarten. Variabelen in het data.frame dat wordt doorgegeven aan leaflet() zijn toegankelijk via functiestijl ~ quote.

Om de datasets state.name en state.center kaart te 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 van folderkaart (Screenshot; klik voor dynamische versie.)

Dynamische folderkaarten in glanzende applicaties

Het Leaflet- pakket is ontworpen om te integreren met Shiny

In de ui roept u leafletOutput() en in de server roept u 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)

Reactieve invoer die de expressie renderLeaflet beïnvloedt, zorgt er echter voor dat de hele kaart opnieuw wordt getekend telkens wanneer het reactieve element wordt bijgewerkt.

Gebruik daarom de functie leafletProxy() om een actieve kaart te wijzigen.

Normaal gesproken gebruikt u leaflet om de statische aspecten van de kaart te maken en leafletProxy om de dynamische elementen te beheren, bijvoorbeeld:

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)

voer hier de afbeeldingsbeschrijving in



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow