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

3
使用 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))

在这里输入图片描述

有没有一种方法可以修改trellis图形参数(例如布局宽度/高度),以实现一致大小的绘图,使其看起来更像绘制RasterStack时使用的布局?

或者是否有另一种组合这些栅格的方法,可以适用于多列和多行的布局?(其他绘图框架也可以,但基本绘图不支持因子栅格。)

1个回答

1
你可以使用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)

或者,您可以按照以下方式向第一个图添加一些空间。

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接