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

使用ggplot2绘制SpatialPolygonsDataFrame格式shapefile时fill属性报错求解

报错原因说明

你之前遇到的报错核心原因是:geom_polygon无法直接读取SpatialPolygonsDataFrame这类S4对象中@data槽里的属性字段,fortify转换后只保留了坐标和对应原数据行号的id字段,丢失了属性关联。直接传入PG@data$NAME会出现长度不匹配的问题,因为属性表只有206行,而转换后的坐标点有32万多行。

解决方法1 基于原有fortify逻辑修复

library(ggplot2)
# 第一步:转换多边形为坐标数据框
pg_coord <- fortify(PG)
# 第二步:给原属性表新增id列,与fortify生成的id一一对应
PG@data$id <- as.character(seq(0, nrow(PG@data)-1))
# 第三步:合并坐标数据与属性数据
pg_full <- merge(pg_coord, PG@data, by = "id")
# 第四步:绘图
ggplot() +
  geom_polygon(data = pg_full, aes(x = long, y = lat, group = group, fill = NAME),
               colour = alpha("darkred", 1/2), size = 0.7) +
  coord_equal() # 保证地图横纵比例正确

解决方法2 用sf包简化操作(更推荐)

现在ggplot2原生支持sf格式的空间数据,无需手动做属性关联,代码更简洁:

library(sf)
library(ggplot2)
# 将SpatialPolygonsDataFrame转为sf对象
pg_sf <- st_as_sf(PG)
# 直接绘图
ggplot(pg_sf) +
  geom_sf(aes(fill = NAME), colour = alpha("darkred", 1/2), size = 0.7)

内容的提问来源于stack exchange,提问作者Weierstraß Ramirez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:36:03