Combine two grobs:一个是使用grid.draw创建的

3

我正在尝试将两个图形对象(grob)组合成一个单独的绘图 - 其中一个是使用“标准ggplot()”调用创建的,另一个是在ggplot_gtable对象上使用grid.draw()创建的(基于此线程)。

library(ggplot2)
library(grid)
library(gridExtra)

plot_gtable <- function(x) {
  grid::grid.draw(ggplot_gtable(ggplot_build(x)))
}

plot1 <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
plot2 <- plot_gtable(ggplot(mtcars, aes(mpg)) + geom_dotplot())

grid.arrange(plot1, plot2)

在gList中出现错误(结构为list(wrapvp = structure(list(x = structure(0.5,class =“unit”,valid.unit = 0L,unit =“npc”):仅允许“grobs”在“gList”中

reprex package(v0.2.1)于2018-12-12创建

显然,调用grid.draw会导致NULL对象,而不是grob,这似乎是grid.arrange()在此情况下失败的原因。

我尝试过先调用或不调用grid::grid.newpage

我尝试使用grid::viewportgridExtra::arrangeGrobggpubr::ggarrangecowplot::plot_grid以及patchwork包,但都没有成功。

如何使用这些对象创建组合图?

1个回答

3

当使用grid.arrange组合绘图和/或grobs时,您需要使用实际对象而不是尝试绘制它。这就是为什么plot2NULL,因为它被绘制而不是返回,所以不能组合。因此,在组合绘图之前不要先绘制它。

library(ggplot2)
library(gridExtra)

# example ggplot
plot1 <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
# example gtable
plot2 <- ggplotGrob(plot1)

grid.arrange(plot1, plot2)

1
非常感谢。正如您所注意到的,我刚开始理解这些不同的对象以及何时使用它们。这对我来说非常有帮助,让我更好地理解了这里的一些内容 :) - tjebo

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