错误国家的等值线图颜色

Chloropleth graph colours in the wrong countries

在 R 上使用传单包时出现了一个奇怪的问题。我正在尝试根据这些国家/地区的用户数量在某些国家/地区进行着色。一切顺利,除了国家被错误的数据着色。因此,例如,摩洛哥被涂上了颜色,就好像它是约旦等。

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

当我仅使用 shapefile (data$POP2005) 中包含的数据绘制地图时,一切正常。所以也许我的加入有问题?

user_data table:

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 个用户(约旦应该有的结果)。其他国家同样不正确。我做错了什么?

非常感谢!

我认为将 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

并制作了这张传单地图(在此处放大):