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

添加fill参数后ggplot地图出现异常线条的问题求助

地图异常线条问题修复方案

问题根源

你的代码存在几个关键错误,导致添加fill参数后地图出现异常线条:

  1. 拼写与变量名错误:tidy(spdf, reigion="code")中,spdf应为读取的地图对象map,reigion拼写错误(正确为region);合并时使用了未定义的spdf_fortified,实际应为map_fortified。
  2. 数据合并逻辑问题:直接用merge会让多边形坐标数据与样本数据重复匹配,同一区域的坐标行被多次复制,导致ggplot绘制时错误连接坐标点,出现异常线条。
  3. 样本数据不规范:若data2中同一id对应多个sample值,合并后会造成填充值混乱,进一步加剧绘制异常。

修复后的完整代码

library(ggplot2)
library(rgdal)
library(broom)
library(dplyr)

# 读取苏格兰区域地图数据
map <- geojson_read("https://martinjc.github.io/UK-GeoJSON/json/sco/topo_lad.json",  what = "sp")

# 修正拼写与变量名,将sp对象转换为ggplot可用的数据框
map_fortified <- tidy(map, region = "code")

# 验证初始无填充地图(正常状态)
ggplot() +
  geom_polygon(data = map_fortified, aes(x = long, y = lat, group = group), fill="white", color="grey") +
  theme_void() +
  coord_map()

# 读取样本数据并规范:确保每个id对应唯一的sample值
data2 <- read.csv("location.csv", header = TRUE)
data2 <- data2 %>% 
  group_by(id) %>% 
  summarize(sample = mean(sample)) %>% # 根据需求替换为sum/median等,保证每个区域一个填充值
  ungroup()

# 统一id类型为因子
data2$id <- as.factor(data2$id)
map_fortified$id <- as.factor(map_fortified$id)

# 使用left_join替代merge,保留原始多边形数据顺序,避免坐标点连接错误
total <- left_join(map_fortified, data2, by = "id")

# 绘制带填充的正常地图
ggplot() +
  geom_polygon(data = total, aes(x = long, y = lat, group = group, fill = sample), color = "grey") +
  theme_void() +
  coord_map()

关键修复点说明

  • 修正拼写与变量名错误,保证数据处理的正确性。
  • 规范样本数据:通过group_by+summarize确保每个区域(id)只有一个sample值,避免填充混乱。
  • 使用left_join替代merge:保留多边形坐标数据的原始顺序,确保ggplot能正确连接每个区域的坐标点,消除异常线条。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:20:35