Recherche…


Introduction

Voir aussi E / S pour les données géographiques

Création de carte de base avec map () à partir des cartes de package

La fonction map() des maps package fournit un point de départ simple pour créer des cartes avec R.

Une carte du monde de base peut être dessinée comme suit:

require(maps)
map()

entrer la description de l'image ici

La couleur du contour peut être modifiée en définissant le paramètre de couleur, col , sur le nom du caractère ou la valeur hexadécimale d’une couleur:

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

entrer la description de l'image ici

Pour remplir les masses de terrain avec la couleur en col nous pouvons définir le fill = TRUE :

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

entrer la description de l'image ici

Un vecteur de longueur quelconque peut être fourni à col lorsque fill = TRUE est également défini:

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

entrer la description de l'image ici

Dans l'exemple ci-dessus, les couleurs de col sont affectées arbitrairement aux polygones de la carte représentant les régions et les couleurs sont recyclées s'il y a moins de couleurs que les polygones.

Nous pouvons également utiliser le codage couleur pour représenter une variable statistique, qui peut éventuellement être décrite dans une légende. Une carte créée en tant que telle est appelée "choropleth".

L'exemple choropleth suivant définit le premier argument de map() , qui est la database de database "county" et "state" pour colorer le chômage en utilisant les données des ensembles de données unemp et county.fips en superposant les lignes d'état en blanc:

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

entrer la description de l'image ici

50 cartes d'état et choroplèthes avancés avec Google Viz

Une question commune est de savoir comment juxtaposer (combiner) séparer physiquement des régions géographiques sur une même carte, comme dans le cas d'un choropleth décrivant les 50 États américains (le continent avec l'Alaska et Hawaii juxtaposés).

La création d'une carte attractive à 50 états est simple lors de l'utilisation de Google Maps. Les interfaces avec l'API de Google incluent les packages googleVis , ggmap et 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

La fonction gvisGeoChart() nécessite beaucoup moins de codage pour créer un choropleth par rapport aux anciennes méthodes de mappage, telles que map() partir des maps package. Le paramètre colorvar permet de colorer facilement une variable statistique, à un niveau spécifié par le paramètre locationvar . Les différentes options transmises aux options sous forme de liste permettent de personnaliser les détails de la carte, tels que la taille ( height ), la forme ( markers ) et le code couleur ( colorAxis et colors ).

Cartes interactives

Le package plotly permet plusieurs types de tracés interactifs, y compris des cartes. Il existe plusieurs façons de créer une carte dans plotly . Soit vous fournissez vous-même les données de la carte (via plot_ly() ou ggplotly() ), utilisez les capacités de cartographie "native" de plot_geo() via plot_geo() ou plot_mapbox() ), ou même une combinaison des deux. Un exemple de fourniture de la carte vous-même serait:

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

entrer la description de l'image ici

Pour une combinaison des deux approches, plot_ly() pour plot_geo() ou plot_mapbox() dans l'exemple ci-dessus. Voir le livre de l' intrigue pour plus d'exemples.

L'exemple suivant est une approche «strictement native» qui utilise l' attribut layout.geo pour définir l'esthétique et le niveau de zoom de la carte. Il utilise également la base de données world.cities des maps pour filtrer les villes brésiliennes et les tracer au-dessus de la carte "native".

Les principales variables: poph est un texte avec la ville et sa population (qui apparaît lors du survol de la souris); q est un facteur ordonné à partir du quantile de la population. ge a des informations pour la mise en page des cartes. Voir la documentation du package pour plus d'informations.

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

Ceci est un instantané

Création de cartes HTML dynamiques avec Leaflet

Leaflet est une bibliothèque JavaScript open-source permettant de créer des cartes dynamiques pour le Web. RStudio a écrit des fixations R pour Leaflet, disponibles via son package de leaflet , construit avec htmlwidgets . Les cartes de dépliants s'intègrent bien avec les écosystèmes RMarkdown et Shiny .

L'interface est redirigée , en utilisant une fonction leaflet() pour initialiser une carte et les fonctions suivantes en ajoutant (ou supprimant) des couches de carte. De nombreux types de calques sont disponibles, des marqueurs avec des popups aux polygones pour créer des cartes choroplèthes. Les variables du fichier data.frame transmis à leaflet leaflet() sont accessibles via la fonction ~ quotation.

Pour mapper les jeux de données state.name et state.center :

library(leaflet)

data.frame(state.name, state.center) %>% 
    leaflet() %>% 
    addProviderTiles('Stamen.Watercolor') %>% 
    addMarkers(lng = ~x, lat = ~y, 
               popup = ~state.name, 
               clusterOptions = markerClusterOptions())
capture d'écran de la carte de la brochure (Capture d'écran, cliquez pour la version dynamique.)

Cartes dynamiques dans des applications brillantes

Le package de brochure est conçu pour s’intégrer à Shiny

Dans l'interface utilisateur que vous appelez leafletOutput() et dans le serveur que vous appelez 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)

Cependant, les entrées réactives qui affectent l'expression renderLeaflet entraînent la redessinisation de la totalité de la carte chaque fois que l'élément réactif est mis à jour.

Par conséquent, pour modifier une carte déjà en cours d’exécution, vous devez utiliser la fonction leafletProxy() .

Normalement, vous utilisez le leaflet pour créer les aspects statiques de la carte, et leafletProxy pour gérer les éléments dynamiques, par exemple:

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)

entrer la description de l'image ici



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow