使用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布局,其中第一个col中有一个绘图,第二个col中有三个绘图?
我尝试使用grid.arrange
绘制一个网格(例如上面的plot5
)与另一个绘图,但获得了一个'网格网格'方法,但获得了:
arrangeGrob(...,as.table = as.table,clip = clip,main = main,: 输入必须是grobs!
更新
感谢您的建议。我会调查viewports
和grid
。与此同时,感谢@DWin,'wq'包中的layOut
函数非常适合我的Sweave
文档中的编译图:
更新2:
arrangeGrob
命令(由@baptiste建议)也运行良好,看起来非常直观 - 至少很容易改变两列的宽度。它还具有不需要`wq'包的好处。
e.g。这是我的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}
产生以下输出:
顺便说一句,有人告诉我为什么出现'&gt; NA'?答案 0 :(得分:70)
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&gt; 2.0.0,您可以使用layout_matrix
参数,
grid.arrange(p,p,p,p, layout_matrix = cbind(c(1,1,1), c(2,3,4)))
答案 1 :(得分:17)
我尝试用网格计算它,并认为我把它弄下来但最终失败了(虽然现在看看我在下面引用的函数中的代码,我可以看到我真的很接近......: - )
'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))
答案 2 :(得分:2)
另一个选择是Thomas Lin Pedersen的patchwork
包。
# install.packages("devtools")
# devtools::install_github("thomasp85/patchwork")
library(patchwork)
生成一些情节。
p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + facet_grid(rows = vars(gear))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
p4 <- ggplot(mtcars) + geom_bar(aes(carb))
现在安排情节。
p1 + (p2 / p3 / p4)
答案 3 :(得分:1)
还有multipanelfigure package值得一提。另请参见此answer。
library(ggplot2)
theme_set(theme_bw())
q1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
q2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
q3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
q4 <- ggplot(mtcars) + geom_bar(aes(carb))
library(magrittr)
library(multipanelfigure)
figure1 <- multi_panel_figure(columns = 2, rows = 3, panel_label_type = "upper-roman")
figure1 %<>%
fill_panel(q1, column = 1, row = 1:3) %<>%
fill_panel(q2, column = 2, row = 1) %<>%
fill_panel(q3, column = 2, row = 2) %<>%
fill_panel(q4, column = 2, row = 3)
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'
figure1
由reprex package(v0.2.0.9000)于2018-07-16创建。