【问题标题】:store arrangeGrob to object, does not create printable object将arrangeGrob存储到对象,不创建可打印对象
【发布时间】:2015-07-16 15:09:27
【问题描述】:

我想保存,但不打印(目前)一堆ggplot()s 到一个网格中(通过arrangeGrob(),对吗?),然后打印并稍后检索它们。

这是existing question 的重新启动。 奇怪的是,that answer 不起作用,我也不知道为什么。 我使用的是完全相同的代码。

  library(ggplot2)
  p1 <- ggplot(mtcars, aes(x=factor(cyl), y=mpg)) + geom_boxplot()
  p2 <- ggplot(mtcars, aes(x=factor(cyl), y=wt)) + geom_boxplot()
  library(gridExtra)
  y <- arrangeGrob(p1, p2)
  class(y)
  y

奇怪的是,不是(如上面的答案)会产生绘图网格,但是:

> class(y)
[1] "gtable" "grob"   "gDesc" 
> y
TableGrob (2 x 1) "arrange": 2 grobs
  z     cells    name           grob
1 1 (1-1,1-1) arrange gtable[layout]
2 2 (2-2,1-1) arrange gtable[layout]

这是怎么回事?

【问题讨论】:

    标签: r ggplot2 gridextra


    【解决方案1】:

    最近更新了gridExtra 包,从而改变了arrangeGrob 在内部的工作方式以及它返回的对象类型(现在是gtable)。

    您需要拨打grid.draw:

    grid.draw(y)
    

    编辑:不要像最初建议的那样使用plot();它将添加灰色背景,并且仅用于调试 gtables。

    【讨论】:

    • 对其他问题的回答建议使用grid.draw() plot()。我很困惑。 -> stackoverflow.com/questions/31463445/… 其他答案的作者似乎是包作者...
    • @maxheld 实际上这个答案并没有解释如何在稍后的情节中使用ggsave 保存情节,是吗?我的问题是保存,不知道如何更改我的代码而不从 ggplot2 下载开发版本
    • 值得一提的是,grid.draw(x) 的输出在大多数情况下似乎为 NULL。为了解决这个问题并使用 ggsave,我使用了ggpubr::as_ggplot(x)。这会将 gtable/grobArrange() 转换为 ggplot 类,然后可以照常使用。附加技术说明,我相信 as_ggplot() 是基于 cowplot 的代码构建的。
    • 这里提到的grid.drawgrid::grid.draw吗? gridExtra 中似乎没有 grid.draw。我为类似的对象选择了gridExtra::grid.arrange
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2013-03-18
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多