在R中使用geom_sf绘制Shapefile报错的技术求助
解决ggplot2 + geom_sf绘制空间数据的错误
问题背景
通过readOGR()读取Shapefile得到SpatialPolygonsDataFrame,使用基础包plot()可正常绘制,但调用ggplot2::geom_sf()时仅显示空白坐标轴,同时抛出错误:
Computation failed in `stat_sf()` Caused by error in `UseMethod()`: ! no applicable method for 'st_bbox' applied to an object of class "list"
错误原因
geom_sf()仅支持sf格式对象,原代码错误地将SpatialPolygonsDataFrame的属性表(@data)和多边形列表(@polygons)传入,这两个结构并非sf标准的几何对象,无法被stat_sf()处理。
解决方案
方案1:直接用sf包读取数据(推荐)
用sf::st_read()替代rgdal::readOGR(),直接生成sf对象,无需额外转换:
library(ggplot2) library(sf) # 读取Shapefile为sf对象 nbrhd_sf <- st_read(dsn = shapefile_filepath, layer = "geo_export_00bf6ede-a61b-4746-8c69-e1510a184344") # 直接绘制 ggplot(nbrhd_sf) + geom_sf() + coord_sf()
方案2:将已有sp对象转为sf对象
如果已经通过readOGR()得到了SpatialPolygonsDataFrame,可以用sf::st_as_sf()转换格式:
library(ggplot2) library(sf) library(rgdal) # 读取为SpatialPolygonsDataFrame nbrhd_shp <- readOGR(dsn = shapefile_filepath, layer = "geo_export_00bf6ede-a61b-4746-8c69-e1510a184344") # 转换为sf对象 nbrhd_sf <- st_as_sf(nbrhd_shp) # 绘制 ggplot(nbrhd_sf) + geom_sf() + coord_sf()
额外说明
geom_sf()会自动识别sf对象中的geometry列,无需在aes()中手动指定;- 可通过
geom_sf()的参数自定义样式,例如:geom_sf(fill = "lightblue", color = "white", linewidth = 0.5); - 若无需强制指定坐标系,可省略
coord_sf(),ggplot会自动采用数据自带的CRS。
内容的提问来源于stack exchange,提问作者BLP92
相关产品推荐
相关产品推荐

