2

我正在 R 中进行映射,并在 package.json 中发现了非常有用的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))

使用

 layout(matrix(c(1, 2, 0, 3, 4, 5), 2, 3))

工作时失败,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

内部是否有功能levelplotlattice可以进行这种布局?

提前致谢。

4

1 回答 1

7

正如@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)))

在此处输入图像描述

如果您不想对传递给的列表进行硬编码index.cond,可以使用以下内容:

index.cond=list(c(matrix(1:nlayers(s), ncol=2, byrow=TRUE)))

其中2表示您将在布局中拥有的行数。


当然,您也可以传递stack按所需的逐行绘图顺序排列的图层,例如:

levelplot(s[[c(matrix(1:nlayers(s), ncol=2, byrow=TRUE))]], layout=c(3, 2))
于 2015-02-20T03:35:48.427 回答