将gridExtra :: grid.arrange的输出存储到对象中

Ben*_*min 12 r ggplot2 gridextra

我将多个绘图放在一个图像中,gridExtra::grid.arrange并且希望可以选择将组合绘图保存为可以作为返回对象列表的一部分从函数内返回的对象.理想情况下,我想在不打印绘图对象的情况下执行此操作.

下面的代码创建了两个图,将它们组合在一起grid.arrange,并尝试将结果保存到x.但是,x评估NULL并打印图表.可以使用关闭grid.arrange我的文档arrangeGrob和建议绘图plot=FALSE,但是当我尝试这个因为FALSE不是grob对象时我收到错误.

对我不理解的任何建议?

# R under development
# Windows 7 (32 bit)
# ggplot2 1.0.0
# gridExtra 0.9.1

p1 <- ggplot(mtcars, aes(x=factor(cyl), y=mpg)) + geom_boxplot()

p2 <- ggplot(mtcars, aes(x=factor(cyl), y=wt)) + geom_boxplot()

x <- gridExtra::grid.arrange(p1, p2)

x
Run Code Online (Sandbox Code Playgroud)

根据评论,我正在添加此编辑.当我尝试时arrangeGrob,我根本没有输出.

> gridExtra::arrangeGrob(p1, p2)
> print(gridExtra::arrangeGrob(p1, p2))
Error: No layers in plot
> x <- gridExtra::arrangeGrob(p1, p2)
> x
Error: No layers in plot
Run Code Online (Sandbox Code Playgroud)

ton*_*nov 6

您编辑中的代码无法正常工作,因为您没有加载gridExtra.

library(gridExtra)
y <- arrangeGrob(p1, p2, ncol = 1)
class(y)
#[1] "gtable" "grob"   "gDesc"
grid.draw(y)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

编辑:从 2.0.0 版开始,我对grid以下依赖项的评论不再有效,因为grid现在已导入。

编辑:使用 gridExtra 版本 >= 2.0.0,无需附加任何一个包,

p <- ggplot2::qplot(1,1)
x <- gridExtra::arrangeGrob(p, p)
grid::grid.draw(x)
Run Code Online (Sandbox Code Playgroud)

  • 请不要使用`plot()`,输出是一个gtable,应该用`grid.draw()`(遵循网格约定)绘制。 (2认同)