错误国家的等值线图颜色
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
并制作了这张传单地图(在此处放大):
在 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
并制作了这张传单地图(在此处放大):