如何在R中绘制多个美国州的外部轮廓线(仅外层边界)
绘制美国多州的统一外层轮廓线
我明白你想要的效果——只保留中西部这些州的整体外部轮廓,去掉内部各州之间的边界线对吧?咱们可以通过空间数据合并的方式来实现这个需求,用sf包处理几何图形会更方便高效。
问题分析
你当前的代码里,aes(group = group)会让每个州的多边形独立绘制,所以会显示所有州的内部边界。要得到统一的外层轮廓,需要把选中的多个州的多边形合并成一个单一的几何对象。
解决方案代码
# 加载所需包 library(tidyverse) library(sf) library(maps) # 获取美国州的空间数据并转换为sf格式 states_sf <- st_as_sf(map("state", plot = FALSE, fill = TRUE)) # 筛选中西部的州(注意名称是小写) midwest_states <- c("illinois", "indiana", "iowa", "kansas", "michigan", "minnesota", "missouri", "nebraska", "north dakota", "ohio", "south dakota", "wisconsin") midwest_sf <- filter(states_sf, ID %in% midwest_states) # 合并选中州的几何图形,得到统一的外层轮廓 midwest_union <- st_union(midwest_sf) # 绘制图形:先填充各州,再添加外层轮廓线 ggplot() + # 绘制灰色填充的各州(隐藏内部边界) geom_sf(data = midwest_sf, fill = "gray", color = NA) + # 绘制外层轮廓线(这里用粉色,可自定义颜色和粗细) geom_sf(data = midwest_union, color = "hotpink", size = 1.5, fill = NA) + coord_sf() + theme_minimal()
关键步骤说明
st_as_sf():把maps包的传统地图数据转换为sf格式的空间对象,方便后续的几何操作。st_union():将多个州的多边形合并成一个单一的多面多边形,这个合并后的对象就只包含整体的外层边界了。- 绘图时先画填充的各州(设置
color = NA隐藏内部边界),再叠加合并后的外层轮廓线,就能实现你想要的效果。
如果你之前习惯用fifty_states数据(可能来自fiftystater包),只需要把获取数据的部分替换成对应的sf转换即可,核心的合并逻辑是完全一致的。
内容的提问来源于stack exchange,提问作者MMM
相关产品推荐
相关产品推荐

