gtable 对象的多图
multiplot for gtable objects
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))
我想(使用函数 DoStuff
)将绘图作为 gtable
对象而不是 ggplot
对象进行操作。
g1 = ggplot_gtable(ggplot_build(p1))
g1 = DoStuff(g1)
g2 = ggplot_gtable(ggplot_build(p1))
g2 = DoStuff(g2)
我可以用 grid.draw
打印一个 gtable。
如何修改 multiplot 函数,使其也接受 gtable
个对象而不仅仅是 ggplot
个对象?
在我的 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))
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))
我想(使用函数 DoStuff
)将绘图作为 gtable
对象而不是 ggplot
对象进行操作。
g1 = ggplot_gtable(ggplot_build(p1))
g1 = DoStuff(g1)
g2 = ggplot_gtable(ggplot_build(p1))
g2 = DoStuff(g2)
我可以用 grid.draw
打印一个 gtable。
如何修改 multiplot 函数,使其也接受 gtable
个对象而不仅仅是 ggplot
个对象?
在我的 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))