使用ggplot2绘制空间对象时Shapefile读取异常问题
解决ggplot2绘制SHP文件多边形异常的问题
问题根源
你直接将sp对象转为普通data.frame后调用的shape_x$LON和shape_x$LAT是多边形的中心坐标,并非构成多边形边界的顶点坐标,因此geom_polygon无法正确识别并绘制完整的多边形。
方法1:用fortify()处理sp对象(适配旧版rgdal)
- 加载依赖包:
library(rgdal) library(ggplot2)
- 读取SHP文件(替换为你的文件路径):
shape_x <- readOGR(dsn = "存放SHP的文件夹路径", layer = "TM_WORLD_BORDERS_SIMPL-0.3")
- 将sp对象转换为ggplot兼容的data.frame(包含顶点坐标和分组信息):
shape_df <- fortify(shape_x)
- 用ggplot绘制多边形:
ggplot() + geom_polygon(data = shape_df, aes(x = long, y = lat, group = group), fill = "white", colour = "black") + coord_map() # 修正地图投影,避免图形拉伸变形
方法2:使用sf包(推荐,替代rgdal)
rgdal已停止维护,sf是当前处理地理空间数据的标准工具,使用更简便:
- 加载sf包:
library(sf) library(ggplot2)
- 读取SHP文件:
shape_sf <- st_read("你的SHP文件完整路径/TM_WORLD_BORDERS_SIMPL-0.3.shp")
- 直接用
geom_sf绘图:
ggplot() + geom_sf(data = shape_sf, fill = "white", colour = "black")
geom_sf会自动识别sf对象的几何信息,无需手动指定坐标和分组。
内容的提问来源于stack exchange,提问作者zappbran
相关产品推荐
相关产品推荐

