You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terra包不同范围SpatRasters多面板图对齐与边框填充问题

解决terra包多面板地图对齐问题

针对你用terra包绘制2×2多面板地图时小范围地图居中导致标签效果差的问题,提供以下两种解决方案:

方案1:所有地图左上对齐,留白置于右下

通过统一所有子图的坐标范围,并关闭坐标轴扩展留白,让地图从绘图区域左上角开始绘制,多余留白自动落在右下角。

library(terra)
r <- rast(system.file("ex/elev.tif", package="terra"))

# 定义所有要使用的地图范围
exts <- list(
  ext(c(5.7,6.5,49.4,50.2)),
  ext(c(6.1,6.5,49.4,50.2)),
  ext(c(5.7,6.3,49.9,50)),
  ext(c(5.7,6.5,49.4,50.2))
)

# 计算所有范围的并集,作为统一的坐标边界
global_ext <- reduce(exts, union)
xlim <- c(xmin(global_ext), xmax(global_ext))
ylim <- c(ymin(global_ext), ymax(global_ext))

mar1 <- c(2,1,1,1)
par(mfrow=c(2,2), mar=c(0,0,0,0), oma=c(0,0,1.5,0))

# 每个子图使用统一坐标边界,xaxs/yaxs="i"关闭坐标轴扩展留白
plot(r, legend=F, mar=mar1, ext=exts[[1]], xlim=xlim, ylim=ylim, xaxs="i", yaxs="i")
mtext("Map one", adj=0)
plot(r, legend=F, mar=mar1, ext=exts[[2]], xlim=xlim, ylim=ylim, xaxs="i", yaxs="i")
mtext("Map two", adj=0)
plot(r, legend=F, mar=mar1, ext=exts[[3]], xlim=xlim, ylim=ylim, xaxs="i", yaxs="i")
mtext("Map three", adj=0)
plot(r, legend=F, mar=mar1, ext=exts[[4]], xlim=xlim, ylim=ylim, xaxs="i", yaxs="i")
mtext("Map four", adj=0)

方案2:外边框填满绘图窗口,留白在框内

通过调整绘图区域参数,让子图边框完全填满分配的面板空间,地图在边框内居中,留白限制在边框内部,效果类似raster包的默认绘图。

library(terra)
r <- rast(system.file("ex/elev.tif", package="terra"))
mar1 <- c(2,1,1,1)

# plt=c(0,1,0,1)强制子图区域填满面板,expand=FALSE取消地图额外留白
par(mfrow=c(2,2), mar=c(0,0,0,0), oma=c(0,0,1.5,0), plt=c(0,1,0,1))

plot(r, legend=F, mar=mar1, ext=c(5.7,6.5,49.4,50.2), expand=FALSE)
mtext("Map one", adj=0)
plot(r, legend=F, mar=mar1, ext=c(6.1,6.5,49.4,50.2), expand=FALSE)
mtext("Map two", adj=0)
plot(r, legend=F, mar=mar1, ext=c(5.7,6.3,49.9,50), expand=FALSE)
mtext("Map three", adj=0)
plot(r, legend=F, mar=mar1, ext=c(5.7,6.5,49.4,50.2), expand=FALSE)
mtext("Map four", adj=0)

内容的提问来源于stack exchange,提问作者LvG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:25:10