You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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()

关键步骤说明

  1. st_as_sf():把maps包的传统地图数据转换为sf格式的空间对象,方便后续的几何操作。
  2. st_union():将多个州的多边形合并成一个单一的多面多边形,这个合并后的对象就只包含整体的外层边界了。
  3. 绘图时先画填充的各州(设置color = NA隐藏内部边界),再叠加合并后的外层轮廓线,就能实现你想要的效果。

如果你之前习惯用fifty_states数据(可能来自fiftystater包),只需要把获取数据的部分替换成对应的sf转换即可,核心的合并逻辑是完全一致的。

内容的提问来源于stack exchange,提问作者MMM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:56:18