【问题标题】:multiplot for gtable objectsgtable 对象的多图
【发布时间】:2017-11-17 20:06:47
【问题描述】:

multiplot function is defined here in the cookbook

考虑以下图表。

p1 = ggplot(mtcars,aes(y=mpg, x=cyl)) + geom_point()
p2 = ggplot(mtcars,aes(y=disp, x=cyl)) + geom_point()
multiplot(p1,p2, layout=matrix(1:2,nrow=1))

我想以gtable 对象而不是ggplot 对象的形式操纵(使用函数DoStuff)绘图。

g1 = ggplot_gtable(ggplot_build(p1))
g1 = DoStuff(g1)
g2 = ggplot_gtable(ggplot_build(p1))
g2 = DoStuff(g2)

我可以用grid.draw打印一个gtable。

如何修改 multiplot 函数,使其也接受 gtable 对象而不仅仅是 ggplot 对象?

【问题讨论】:

    标签: r ggplot2 graph gtable grob


    【解决方案1】:

    在我的somewhat biased view 中你最好使用

    gridExtra::grid.arrange(g1,g2, ncol=2)
    

    但要回答你的问题:

    改变

    print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row,
                                    layout.pos.col = matchidx$col))
    

    类似

      if(inherits(plots[[i]], "gg")) {
    
        print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row,
                                        layout.pos.col = matchidx$col))
    
      } else if(inherits(plots[[i]], "gtable")) {
    
        pushViewport(viewport(layout.pos.row = matchidx$row, 
                              layout.pos.col = matchidx$col))
        grid.draw(plots[[i]])
        upViewport()
      }
    

    并像以前一样调用它,

    g1 <- ggplotGrob(p1)
    g2 <- ggplotGrob(p2)
    multiplot(g1,g2, layout=matrix(1:2,nrow=1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多