我怎样才能获得ggplots的“不平衡”网格?

通过grid.arrange我可以在网格中排列多个ggplotgraphics,通过使用如下方法来实现多面板graphics:

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

然后生成一些ggplot2图

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

我怎样才能得到一个“不平衡”的2列布局,整个第一列的一个情节和第二列的三个情节? 我试着用grid.arrange来绘制一个网格(比如plot5 ,上面)和另一个plot,但是获得了一个“grid-of-grids”

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

更新:

感谢您的build议。 我将研究viewportsgrid 。 同时,感谢@​​DWin,“wq”包中的layOut函数对于我的Sweave文档中的编译图效果非常好: 在这里输入图像描述

更新2:

arrangeGrob命令(如@baptistebuild议的)也很好,而且看起来非常直观 – 至less很容易改变两列的宽度。 它也有不需要`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} 

产生以下输出: 在这里输入图像描述

顺便说一句,有人告诉我为什么“NA”出现?

grid.arrange直接在设备上绘制; 如果你想把它和其他的网格对象结合起来,你需要像在

  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))) 

我试图用网格计算出来,并认为我把它放下了,但最终失败了(虽然现在看我在下面的函数中的代码,我可以看到我真的很接近… 🙂

'wq'包有一个layOutfunction,可以为你做到这一点:

 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)) 

在这里输入图像描述