使用gtable对象进行arrangeGrob操作

4

我从https://dev59.com/ImYr5IYBdhLWcg3w6eQ3#13295880了解到如何排列两个具有对齐绘图区域的图表。

我的问题是:如何获取排列好的图表对象?

示例:

require(ggplot2)
require(gridExtra)

A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +coord_flip() 
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip() 

gA <- ggplot_gtable(ggplot_build(A))
gB <- ggplot_gtable(ggplot_build(B))
maxWidth = grid::unit.pmax(gA$widths[2:3], gB$widths[2:3])
gA$widths[2:3] <- as.list(maxWidth)
gB$widths[2:3] <- as.list(maxWidth)

## works:
grid.arrange(gA, gB, ncol=1)

## does not work:
theplot <- grid.arrange(gA, gB, ncol=1, plot=FALSE)

1
@baptiste 在 grid.arrange 的帮助页面中有这样一段话:返回一个框架 grob;如果 plot=T,则会产生副作用(绘图) - Andreas
很好的发现,帮助页面自从早期版本就没有更新过,而在那个版本中这个功能被删除了。 - baptiste
5
我已经更新了帮助页面(在Github上),现在grid.arrange函数也会以不可见的方式返回grob对象。 - baptiste
非常好!那会很方便。非常感谢。不幸的是,我没有足够的声望来点赞评论,抱歉 :-( - Andreas
谢谢,但我认为点赞评论并不重要(据我所知,这个功能只是为了防止无休止的“我也是!”流)。 - baptiste
显示剩余2条评论
1个回答

5
使用函数arrangeGrob()将两个图表保存为一个对象。
theplot <- arrangeGrob(gA, gB, ncol=1)

对我来说不起作用:arrangeGrob(gA, gB, ncol = 1, plot = FALSE)中出现错误: 输入必须是grobs! - Andreas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接