将数据与 SpatialPolygonsDataFrame 对象列表匹配到传单中的 运行 等值线图

Matching up data with a list of SpatialPolygonsDataFrame objects to run a choropleth map in leaflet

我正在自学如何使用 R 中的地图工具,在这种情况下,我希望根据 mydata 下面的数据框。

请注意,我实际上运行为 30 个国家/地区设置了此功能。出于可重现的目的,我只是将这里限制为 2 个国家/地区。另外请注意,getData 函数将从 GADM.org 网站下载。

library(sp)
library(raster)
library(tidyverse)
library(leaflet)

France_map <- getData(name = "GADM", country = "FRA", level = 1)
Germany_map <- getData(name = "GADM", country = "DEU", level = 1)

all_maps <- list(France_map, Germany_map)

mydata <- dput(structure(list(cntry = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
  2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Germany", "France"), 
  class = "factor"), region_name = structure(1:37, .Label = c("Baden-Württemberg", 
  "Bayern", "Berlin", "Brandenburg", "Bremen", "Hamburg", "Hessen", "Mecklenburg-Vorpommern", 
  "Niedersachsen", "Nordrhein-Westfalen", "Rheinland-Pfalz", "Saarland", "Sachsen", 
  "Sachsen-Anhalt", "Schleswig-Holstein", "Thüringen", "Île-de-France", "Champagne-Ardenne", 
  "Picardie", "Haute-Normandie", "Centre", "Basse-Normandie", "Bourgogne", 
  "Nord-Pas-de-Calais", "Lorraine", "Alsace", "Franche-Comté", "Pays de la Loire", 
  "Bretagne", "Poitou-Charentes", "Aquitaine", "Midi-Pyrénées", "Limousin", 
  "Rhône-Alpes", "Auvergne", "Languedoc-Roussillon", "Provence-Alpes-Côte d'Azur"), 
  class = "factor"), prop = c(0.0771812080536913, 0.0808625336927224, 0.154200131820421, 
  0.143712574850299, 0.125, 0.1875, 0.160220994475138, 0.201612903225806, 
  0.149122807017544, 0.140562248995984, 0.111111111111111, 0.130434782608696, 
  0.162454873646209, 0.141891891891892, 0.164835164835165, 0.0810810810810811, 
  0.320361006883289, 0.173944002182893, 0.267984998166555, 0.145696294975402, 
  0.307927600677265, 0.218154962499145, 0.249630808322935, 0.276741747762545, 
  0.0959323496890737, 0.144213110146746, 0.0929990840802643, 0.190088309954592, 
  0.159029556704208, 0.204186267910012, 0.26199124557682, 0.171309738332821, 
  0.125707503945437, 0.241559205433323, 0.170811734710593, 0.275876128675216, 
  0.205483749159249)), .Names = c("cntry", "region_name", "prop"), class = c("tbl_df", 
  "tbl", "data.frame"), row.names = c(NA, -37L)))

我现在想做的是将 mydataprop 变量的结果显示到等值线图上,使用类似的东西:

leaflet() %>%
  addPolygons()

我的绊脚石是,我如何让 R 将 prop 变量中的结果与从 SPDF 文件到 运行 等值线图的相应区域相匹配?

我结合了Germany_mapFrance_map,这样我就可以一次绘制多边形。然后,我为 prop 创建了颜色。当您使用 addPolygons() 时,您指定 fillColor = ~mypal(mydata$prop)。道具值不必保留在多边形数据中。同样,您在 addLegend() 中指定 values = mydata$prop。您会在屏幕截图中看到下面的结果。

library(sp)
library(raster)
library(maptools)
library(leaflet)

# Combine German and French polygons
mymap <- rbind(Germany_map, France_map, makeUniqueIDs = TRUE)

### Create colors for prop
mypal <- colorNumeric(palette = "Reds", domain = mydata$prop)


leaflet() %>% 
addProviderTiles("OpenStreetMap.Mapnik") %>%
setView(lat = 49.2402, lng = 6.9969, zoom = 6) %>%
addPolygons(data = mymap,
            stroke = FALSE, smoothFactor = 0.2, fillOpacity = 0.5,
            fillColor = ~mypal(mydata$prop),
            popup = paste("Region: ", mymap$NAME_1, "<br>",
                          "Prop: ", mydata$prop, "<br>")) %>%
addLegend(position = "bottomright", pal = mypal, values = mydata$prop,
          title = "Prop",
          opacity = 0.5)