错误国家/地区的色度图颜色

时间:2019-01-11 15:52:50

标签: r r-leaflet

在R上使用Leaflet程序包会产生一个奇怪的问题。我试图在某些国家/地区进行着色,具体取决于这些国家/地区中的用户数量。一切进展顺利,除了这些国家的数据错误。举例来说,摩洛哥就像乔丹一样被染成彩色。

我正在使用这个免费的世界地图shapefile:http://thematicmapping.org/downloads/world_borders.php

当我仅使用shapefile(data $ POP2005)中包含的数据绘制地图时,一切都很好。那么也许我的加入存在问题?

user_data表:

NAME        USERS
Morocco     250
Jordan      1000
Canada      5007

使用的代码:

world <- readOGR(dsn=path.expand("~/TM_WORLD_BORDERS_SIMPL-0.3"), 
layer="TM_WORLD_BORDERS_SIMPL-0.3")
world@data <- merge(world@data, user_data, by="NAME", all.x = TRUE)

pal <- colorBin("YlOrRd", domain = world@data$USERS, bins = 5)
m <- leaflet(world) %>%
addTiles() %>% 
addPolygons(
fillColor = ~pal(world@data$USERS),
weight = 2,
opacity = 1,
color = "white",
dashArray = "3",
fillOpacity = 0.7)
m

当我尝试上面的代码时,摩洛哥显示为1000个用户(约旦应该有的结果)。其他国家同样是不正确的。我在做什么错了?

非常感谢!

1 个答案:

答案 0 :(得分:1)

我认为通过将world@data与自身合并会导致一些难以跟踪的奇怪交互(例如,在我的第一次尝试中,摩洛哥很好,但古巴却很烂)。取而代之的是,我使用了sp包中的sp::merge,这使我可以简化代码:

library(rgdal)
library(leaflet)

user_data <- data.frame(NAME = c("Morocco", "Jordan", "Canada"),                      
                        USERS = c(250, 1000, 5007))

world <- readOGR(dsn="TM_WORLD_BORDERS_SIMPL-0.3.shp", 
                 layer="TM_WORLD_BORDERS_SIMPL-0.3")
world_merged <- sp::merge(world, user_data)

pal <- colorBin("YlOrRd", domain = world_merged$USERS, bins = 5)
m <- leaflet(world) %>%
  addTiles() %>% 
  addPolygons(
    fillColor = ~pal(world_merged$USERS),
    weight = 2,
    opacity = 1,
    color = "white",
    dashArray = "3",
    fillOpacity = 0.7)
m

并生成了此传单地图(在此处放大):

enter image description here

相关问题