ggarrange 绘制列表中的所有图

Jas*_*oal 13 r ggplot2

我有很多想把它们放在一页上的图,ggarrange在这方面做得很好,但是,似乎我必须将这些图中的每一个都放在列表中,它们作为此ggarrange函数的输入存储在其中,其他而不是直接将列表作为输入,请参阅以下详细信息:

一个天真的例子:

p1 <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) +
  geom_point()
p2 <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) +
  geom_point() + facet_wrap( ~ cyl, ncol=2, scales = "free") +
  guides(colour="none") +
  theme()
plot_list = list(p1,p2) 
Run Code Online (Sandbox Code Playgroud)

我现在能做的:

ggarrange(p1,p2, widths = c(2,1), labels = c("a", "b"))
Run Code Online (Sandbox Code Playgroud)

我真正想做但没能做到的:

ggarrange(plot_list, widths = c(2,1), labels = c("a", "b"))
Run Code Online (Sandbox Code Playgroud)

有谁知道怎么做?如果地块数量很大并且可能会不时发生变化,这可以节省大量时间。样本不是我的,从这里复制的。

======== 编辑 ========

根据下面的优秀答案,至少有可用的选项:1,请参阅已接受的答案,2,来自删除的答案,我几乎没有修改 do.call(ggarrange, c(plot_list[1:2], widths = c(2, 1), labels = c("a", "b"))) 将参数传递给函数ggarrangec()对我有用,但as.list()没有。

MrF*_*ick 8

查看帮助文件?ggarrange。它有一个plotlist=参数。只需在那里传递您的清单。

ggarrange(plotlist=plot_list, widths = c(2,1), labels = c("a", "b"))
Run Code Online (Sandbox Code Playgroud)

  • 看起来确实有两个不同的包具有 `ggarrange` 功能。这特别适用于`ggpubr` 包。您提供的链接是针对 `egg` 包的。我想这就是为什么在调用非基础 R 函数时清楚你正在使用的包是很重要的。 (2认同)