优雅地结合连续和因子栅格

Elegantly combining continuous and factor rasters

当使用 rasterVis::levelplot 使用 print(..., more=TRUE) 绘制连续栅格和因子栅格的混合时,面板的高度和宽度不一致。这似乎是由于色键(图例)和色键的刻度标签的宽度不同所致。

例如:

library(raster)
library(rasterVis)

r1 <- raster(matrix(runif(100), 10))
r2 <- as.factor(raster(matrix(rbinom(100, 1, 0.8), 10)))
levels(r2)[[1]]$name <- c('gray', 'lightblue')

p1 <- levelplot(r1, margin=FALSE, scales=list(draw=FALSE), 
                at=seq(0, 1, length.out=100))
p2 <- levelplot(r2, scales=list(draw=FALSE), 
                col.regions=c('gray90', 'lightblue'))

print(p1, split=c(1, 1, 1, 2), more=TRUE)
print(p2, split=c(1, 2, 1, 2))

有没有办法修改网格图形参数(例如,布局 widths/heights?)以实现大小一致的绘图,使其看起来更像绘制 RasterStack 时使用的布局?

或者是否有一种组合这些栅格的替代方法,可以缩放到具有多列和多行的布局? (其他绘图框架很好,但基本图不支持因子栅格。)

您可以使用 latticeExtra 包中的 ?c.trellis 函数。

library(latticeExtra)
c(p1, p2, layout = c(1, 2), merge.legends = TRUE)

但是,在您的例子中,图例略有重叠。如果图的顺序不相关,您可以改用

c(p2, p1, layout = c(1, 2), merge.legends = TRUE)

或者您可以添加一些 space 到您的第一个图,如下所示。

p1 <- levelplot(r1, margin=FALSE, scales=list(draw=FALSE), 
                at=seq(0, 1, length.out=100), 
                par.settings = rasterTheme(layout.widths = list(key.right = 1.5)))
c(p1, p2, layout = c(1, 2), merge.legends = TRUE)