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
相关产品推荐
相关产品推荐

