使用 ggplot 为自定义映射分组子区域

Grouping subregions for custom mapping with ggplot

我选择了一个项目,要求我绘制美国境内的自定义区域(包括 OCONUS 区域和领地)。因为整个数据集很大,所以我放了一个“小”子集here(文件名为AZExample.csv)。我的完整数据框的名称是 allgeo,我已经走到这一步了:

colnames(allgeo) <- c("County", "long", "lat", "group", "order", "State", "sregion")

g <- ggplot(NULL)
# Plot state outlines
g <- g + geom_polygon(data = us_states, aes(x = long, y = lat, group = group), 
      color = "black", fill = "white", size = 0.1)
g <- g + coord_map(projection = "albers", lat0 = 39, lat1 = 45)
# Add county outlines
g <- g + geom_polygon(data = allgeo, aes(x = long, y = lat, group = group, 
      fill = sregion))
g <- g + guides(fill = "none")
g <- g + theme(axis.line = element_blank(),
      axis.text = element_blank(),
      axis.ticks = element_blank(),
      axis.title = element_blank(),
      panel.background = element_blank(),
      panel.border = element_blank(),
      panel.grid = element_blank())
g

我正在尝试制作一张美国的图像(有时包括领土),用我在这里所说的 sregion 给它们上色。我得到的情节不是我想要的,因为 sregions 不是纯色:

最终我想添加其他县集合,但在此之前,我需要弄清楚这一点。我确信这是创建这样的地图时的基本内容,但我以前没有这样做过。有什么建议吗?

您的 csv 包含绘图顺序,只有按照此顺序对数据进行排序才能正确绘制多边形。对于您提供的子集,我们可以做:

library(ggplot2)

url <- paste0("https://raw.githubusercontent.com/",
              "Doc-Midnight/Test_Dir/main/AZExample.csv")

allgeo <- read.csv(url)
ggplot() + 
  geom_polygon(data = allgeo[order(allgeo$order),], 
               aes(x = long, y = lat, group = group, fill = sregion), 
               color = "black") + 
  coord_map(xlim = c(-115, -108), ylim = c(30, 37.5)) +
  theme_void()

reprex package (v2.0.1)

于 2022-04-14 创建