如何用geom_spatvector绘图时保留ggplot2设定的范围不被覆盖?
解决方案:用
geom_spatvector实现指定范围绘图(基于terra的SpatVector) 方法1:先裁剪SpatVector到目标范围
直接用terra::crop()将超出设定范围的要素裁剪后再绘图,确保绘图范围严格遵循坐标限制:
# 加载所需包 library(terra) library(tidyterra) library(ggplot2) # 读取shapefiles SHP1 <- terra::vect('file1.shp') SHP2 <- terra::vect('file2.shp') # 定义目标范围(x范围可根据需求自定义) target_ext <- ext( xmin = terra::xmin(SHP1), xmax = terra::xmax(SHP1), ymin = 100000, ymax = 800000 ) # 裁剪SpatVector SHP1_cropped <- terra::crop(SHP1, target_ext) SHP2_cropped <- terra::crop(SHP2, target_ext) # 绘图 ggplot() + coord_equal() + geom_spatvector(data=SHP1_cropped, fill=NA, color='grey') + geom_spatvector(data=SHP2_cropped, fill=NA, color='green', size=1)
方法2:用coord_sf替代coord_equal并强制限制范围
coord_sf是ggplot针对空间数据设计的坐标系统,通过expand=FALSE可避免geom_spatvector自动扩展绘图范围:
# 加载所需包 library(terra) library(tidyterra) library(ggplot2) # 读取shapefiles SHP1 <- terra::vect('file1.shp') SHP2 <- terra::vect('file2.shp') # 绘图 ggplot() + coord_sf(ylim = c(100000, 800000), expand = FALSE) + geom_spatvector(data=SHP1, fill=NA, color='grey') + geom_spatvector(data=SHP2, fill=NA, color='green', size=1)
说明
- 方法1直接处理数据,彻底移除超出范围的要素,适合需要保留裁剪后数据的场景;
- 方法2无需修改原始数据,仅通过坐标系统约束显示范围,效果与你使用
geom_polygon的示例一致。
内容的提问来源于stack exchange,提问作者user21816
相关产品推荐
相关产品推荐

