基于坐标创建多边形并在ggplot中绘图的报错求助
解决ggplot绘制sf多边形报错的问题
报错原因
你用st_polygon创建的是单个sf多边形几何对象,但geom_polygon需要的是包含x(lon)和y(lat)列的数据框,直接传入sf几何对象会导致美学映射不匹配,因为ggplot无法从单个多边形对象里提取出需要的坐标列。
解决方案1:用geom_sf直接绘制(推荐)
sf包和ggplot2有原生适配,用geom_sf可以直接传入sf对象,不需要手动映射x/y:
library(sf) library(ggplot2) # 创建多边形(修正原代码里引号未闭合的问题) poly <- st_polygon(list(as.matrix(data.frame(lat = c(40, 40, 60, 60, 40), lon = c(-60, -40, -40, -60, -60))))) # 把几何对象转为规范的sf数据框 poly_sf <- st_sfc(poly) %>% st_sf() # 绘图 ggplot() + geom_sf(data = poly_sf, color = "red", fill = NA)
如果不想转成sf数据框,直接传st_sfc(poly)也可以正常绘图:
ggplot() + geom_sf(data = st_sfc(poly), color = "red", fill = NA)
解决方案2:将多边形坐标转为数据框给geom_polygon用
如果一定要用geom_polygon,需要把多边形的坐标提取出来转成数据框格式:
# 提取多边形坐标并转为数据框,重命名列名 poly_df <- as.data.frame(poly[[1]]) colnames(poly_df) <- c("lon", "lat") # 绘图 ggplot() + geom_polygon(data = poly_df, aes(x = lon, y = lat), color = "red", fill = NA)
额外修正:原代码的小错误
你原代码里plot(poly, border = "red)少了一个闭合引号,正确写法是plot(poly, border = "red")。
内容的提问来源于stack exchange,提问作者tnt
相关产品推荐
相关产品推荐

