Как я могу получить "несбалансированную" сетку ggplots?

С grid.arrange Я могу организовать несколько фигур ggplot в сетке, чтобы добиться многострочной фигуры, используя что-то вроде:

    library(ggplot2)
    library(grid)
    library(gridExtra)

сгенерируйте некоторые графики ggplot2, тогда

plot5 <- grid.arrange(plot4, plot1, heights=c(3/4, 1/4), ncol=1, nrow=2)

Как я могу получить "несбалансированную" компоновку 2 col с одним графиком во всем первом столбце и тремя графиками во втором столбце? Я играл с подходом "сетка-сетки", пытаясь использовать grid.arrange для построения одной сетки (например, plot5, выше) против другого графика, но получившего:

Error in arrangeGrob(..., as.table = as.table, clip = clip, main = main,  : 
      input must be grobs!

Update:

Спасибо за совет. Я рассмотрю viewports и grid. Тем временем, благодаря @DWin, функция layOut в пакете "wq" очень хорошо работала для фигуры компиляции в моем документе Sweave: enter image description here

Обновление 2:

Команда arrangeGrob (как предложено @baptiste) также работает хорошо и кажется очень интуитивной - по крайней мере, было легко изменить ширину двух столбцов. Это также имеет преимущество, не требуя пакета `wq '.

например. Вот код из моего файла Sweave:

<<label=fig5plot, echo=F, results=hide>>=
plot5<-grid.arrange(plot4, arrangeGrob(plot1, plot2, plot3, ncol=1), 
                    ncol=2, widths=c(1,1.2))
@
\begin{figure}[]
    \begin{center}
<<label=fig5,fig=TRUE,echo=T, width=10,height=12>>=
<<fig5plot>>
@
\end{center}
\caption{Combined plots using the `arrangeGrob' command.}
\label{fig:five}
\end{figure}

который производит следующий вывод: enter image description here

Кстати, кто-нибудь скажет мне, почему появляется " > NA"?

Ответ 1

grid.arrange рисует непосредственно на устройстве; если вы хотите объединить его с другими объектами сетки, вам нужно arrangeGrob, как в

 p = rectGrob()
 grid.arrange(p, arrangeGrob(p,p,p, heights=c(3/4, 1/4, 1/4), ncol=1),
              ncol=2)

Изменить (07/2015): с помощью v > 2.0.0 вы можете использовать аргумент layout_matrix,

 grid.arrange(p,p,p,p, layout_matrix = cbind(c(1,1,1), c(2,3,4)))

Ответ 2

Я попытался разобраться с сеткой и подумал, что у меня все получилось, но в итоге не получилось (хотя теперь смотрю на код в функции, приведенной ниже, я вижу, что я был очень близок...: -)

Пакет 'wq' имеет функцию layOut, которая сделает это за вас:

p1 <- qplot(mpg, wt, data=mtcars)
layOut(list(p1, 1:3, 1),   # takes three rows and the first column
        list(p1, 1, 2),    # next three are on separate rows
         list(p1, 2,2), 
          list(p1, 3,2))

enter image description here