填写世界+美国州地图

时间:2017-03-01 14:36:07

标签: r ggplot2

我正在尝试创建一个世界和美国各州的地图,用一些分类变量着色。我的想法是绘制世界地图,然后绘制美国州地图:

library(maps)
library(ggplot2)
library(dplyr)

states_map <- map_data("state")
world_map <- map_data("world")

world_map <- world_map %>%
  filter(region != "Antarctica")

states <- c("texas")

world <- c("Alaska",
          "Canada",
          "France")

world_map$region <- ifelse(world_map$subregion == "Alaska", "Alaska", world_map$region)

world_map$status <- ifelse(world_map$region %in% world, TRUE, FALSE)
states_map$status <- ifelse(states_map$region %in% states, TRUE, FALSE)

ggplot() + 
  geom_map(aes(map_id = region, fill = status), 
           map = world_map, 
           data = world_map, 
           color = "black") + 
  geom_map(aes(map_id = region, fill = status), 
           map = states_map, 
           data = states_map, 
           color = "black") + 
  expand_limits(x = world_map$long, y = world_map$lat)

但是没有一个法国的颜色是正确的,加拿大的大多数都不是(一些岛屿):

world

知道我哪里错了吗?请注意,如果您将加拿大从“世界”中移除,一切顺利......

1 个答案:

答案 0 :(得分:0)

问题是您使用的国家/地区数据集不适合此目的。它包含许多重叠的形状,这会导致着色问题,而且国家的标签很差

法国本身实际上是第558组,并且在其区域或子区域列中没有数据:

ggplot() + 
  geom_map(aes(map_id = region, fill = status), 
           map = world_map[world_map$group == 558,], 
           data = world_map[world_map$group == 558,], 
           color = "black") + 
  expand_limits(x = world_map$long, y = world_map$lat)

france map

这也是描述欧洲的一些形状,即使你直接为558组着色,也会隐藏它的着色。

map_data("world2")似乎没有这个问题,但使用的视角不同:

enter image description here

我建议下载更好记录的shapefile,然后使用它们来映射。