0

multiplot函数在说明书中定义

考虑以下图表。

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

在此处输入图像描述

我想(使用函数DoStuff)将绘图作为gtable对象而不是对象来操作ggplot

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

我可以用grid.draw.

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

4

1 回答 1

2

在我有点偏见的观点中,你最好使用

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))
于 2017-11-17T20:31:57.473 回答