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

使用ggplot2绘制美国地图时边界匹配异常问题求助

ggplot2美国州地图边界错位修复方案

问题

用ggplot2绘制美国州地图,按是否提出某法案给州着色,着色逻辑正常,但州边界严重错位、图形破碎。

问题根源

  1. merge()函数会打乱地理数据的原始坐标顺序,而geom_polygon必须依赖连续的坐标点顺序才能正确绘制多边形边界,顺序乱了就会画出破碎的图形。
  2. 默认merge()是内连接,会自动过滤掉没有法案数据的州,导致这些州无法在地图上显示,也没法设置“未提出法案”的着色。

修复方法

  • 用left_join()替换merge(),保留地理数据的原始顺序,保证多边形绘制正确。
  • 为没有法案数据的州填充introduced默认值(比如用0代表“未提出”),确保所有州都能显示并正确着色。

修正后代码

library(tidyverse)
library(maps)

# 处理美国州地理数据
all_states <- map_data("state") %>%
  rename(state = region) %>%
  mutate(state = str_to_title(state))

# 读取并处理法案数据
int <- read_csv("int.csv", col_types = cols(introduced = col_integer())) %>%
  # 把州缩写转换成全称
  mutate(state = state.name[match(state, state.abb)]) %>%
  select(state, introduced)

# 左连接数据,保留所有州并填充缺失值
stateData <- left_join(all_states, int, by = "state") %>%
  mutate(introduced = ifelse(is.na(introduced), 0, introduced))

# 绘制地图
plot1 <- ggplot() + 
  geom_polygon(
    data = stateData,
    aes(x = long, y = lat, group = group, fill = as.factor(introduced)),
    color = "grey50"
  ) +
  coord_map()

print(plot1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:06:02