Используйте функцию макета в levelplot

Я делаю сопоставление в 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))

С использованием

 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

Есть ли функция в levelplot или lattice для такого макета?

Заранее спасибо.


person code123    schedule 20.02.2015    source источник
comment
Возможно через index.cond вариант.   -  person    schedule 20.02.2015
comment
Было бы полезно, если бы вы действительно включили некоторые примеры входных данных, чтобы решить проблему воспроизводимый. Также кажется, что вы путаете функцию layout(), которая используется для базовой графики, с параметром layout=, который используется с графиками решетки.   -  person MrFlick    schedule 20.02.2015


Ответы (1)


Как предложил @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))
person jbaums    schedule 20.02.2015