添加fill参数后ggplot地图出现异常线条的问题求助
地图异常线条问题修复方案
问题根源
你的代码存在几个关键错误,导致添加fill参数后地图出现异常线条:
- 拼写与变量名错误:
tidy(spdf, reigion="code")中,spdf应为读取的地图对象map,reigion拼写错误(正确为region);合并时使用了未定义的spdf_fortified,实际应为map_fortified。 - 数据合并逻辑问题:直接用
merge会让多边形坐标数据与样本数据重复匹配,同一区域的坐标行被多次复制,导致ggplot绘制时错误连接坐标点,出现异常线条。 - 样本数据不规范:若
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
相关产品推荐
相关产品推荐

