绘制stars对象的bbox显示小于自身且reprex输出无bbox如何解决
问题1:bbox范围看起来小于stars对象的解决
- 你手动构造bbox多边形的逻辑没有语法错误,但可以用更简洁且不易出错的写法:直接调用
st_as_sfc(st_bbox(tif))生成边界多边形,不需要手动拼接坐标点。 - 视觉上bbox小于栅格的本质是:stars栅格的每个像素是带面积的矩形,
st_bbox返回的是所有像素的最外围边界坐标,你绘制的红框刚好贴合栅格最外层像素的边缘,属于正常现象。如果需要验证边界是否匹配,可以在第一个plot调用中添加axes = TRUE参数查看坐标刻度校验。
问题2:reprex导出图缺失bbox的解决
该问题确实和add = TRUE的生效逻辑有关:stars包的plot方法默认会在绘制完成后重置绘图设备的坐标系统(默认参数reset = TRUE),导致后续add = TRUE的图层实际没有叠加到原有栅格的画布上,本地Plots面板的交互式环境存在渲染缓存所以可以临时显示,reprex捕获静态图像时只会保留第一个plot的输出,因此看不到红色边界。
你只需要在第一个绘制栅格的plot调用中添加reset = FALSE参数即可解决,修改后的可复现代码如下:
library(stars) library(sf) tif <- system.file("tif/L7_ETMs.tif", package = "stars") tif <- read_stars(tif) # 1 - 绘制stars对象的第一个波段,添加reset=FALSE保留绘图坐标系统 plot(tif[,,,1], main = NULL, key.pos = NULL, reset = FALSE) #> downsample set to c(0,0,1) # 2 - 绘制栅格的bbox,使用更简洁的构造方式 plot(st_as_sfc(st_bbox(tif)), border = "red", lwd = 5, add = TRUE)
内容的提问来源于stack exchange,提问作者lovalery
相关产品推荐
相关产品推荐

