我正在R中进行映射,并levelplot在rasterVis包中找到了非常有用的功能.我想在一个窗口中显示多个图.但是,par(mfcol)不适合lattice.我发现layout函数在我的情况下非常有用但是它无法执行我想要做的事情.
这是我的代码:
s <- stack(Precip_DJF1, Precip_DJF2, Precip_DJF3, Precip_DJF4,
Precip_DJF5, Precip_DJF6)
levelplot(s, layout(matrix(c(1, 2, 0, 3, 4, 5), 2, 3)),
at=seq(floor(3.81393), ceiling(23.06363), length.out=20),
par.settings=themes, par.strip.text=list(cex=0),
scales=list(alternating=FALSE))
Run Code Online (Sandbox Code Playgroud)
运用
layout(matrix(c(1, 2, 0, 3, 4, 5), 2, 3))
Run Code Online (Sandbox Code Playgroud)
在layout(3, 2)工作时失败但是图表是按行而不是按列显示的.我希望图表显示在第1列,然后是第2列等.例如:
mat <- matrix(c(1, 2, 3, 4, 5, 6), 2, 3)
> mat
# [,1] [,2] [,3]
# [1,] 1 3 5
# [2,] 2 4 6
Run Code Online (Sandbox Code Playgroud)
是否有内部功能levelplot或lattice进行此类布局?
提前致谢.
正如@Pascal建议的那样,你可以index.cond用来做到这一点:
例如:
library(rasterVis)
s <- stack(replicate(6, raster(matrix(runif(100), 10))))
levelplot(s, layout=c(3, 2), index.cond=list(c(1, 3, 5, 2, 4, 6)))
Run Code Online (Sandbox Code Playgroud)

如果您不想对传递给的列表进行硬编码index.cond,可以使用以下内容:
index.cond=list(c(matrix(1:nlayers(s), ncol=2, byrow=TRUE)))
Run Code Online (Sandbox Code Playgroud)
其中,2表示您在布局中将拥有的行数.
当然,您也可以传递一个stack以所需的行方式绘制顺序排列的图层,例如:
levelplot(s[[c(matrix(1:nlayers(s), ncol=2, byrow=TRUE))]], layout=c(3, 2))
Run Code Online (Sandbox Code Playgroud)