如何使用cowplot中的plot_grid

时间:2017-08-20 18:32:06

标签: r ggplot2 purrr cowplot

我想使用cowplot::plot_grid()将几个ggplot2图表合并为一个。从其文档:

?plot
Arguments

... 
List of plots to be arranged into the grid. The plots can be objects of one of the following classes: ggplot, recordedplot, gtable, or alternative can be a function creating a plot when called (see examples).

那么,如果我将一个ggplot2对象列表输入到plot_grid(),它应该将这些图组合成一个,对吗?

那么为什么这不起作用?

p1 <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) + 
  geom_point(size=2.5) 
p2 <- ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar() +
  theme(axis.text.x = element_text(angle=70, vjust=0.5))

list(p1, p2) %>% 
  map(plot_grid)

2 个答案:

答案 0 :(得分:4)

请参阅map?map)的文档,其中指出:

.x     A list or atomic vector. 
.f     A function, formula, or atomic vector.

这意味着您为.f提供的功能将应用于.x中的每个元素。所以下面的代码

list(p1, p2) %>% map(plot_grid)

与以下代码相同

plot_grid(p1)
plot_grid(p2)

,这可能不是你想要的。

你想要的可能就是这个

plot_grid(p1, p2)

或者这个

plot_grid(plotlist = list(p1, p2))

答案 1 :(得分:0)

您希望do.call()而不是map()将参数列表传递给函数。对于上面的示例:

library(ggplot2)

p1 <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) + 
  geom_point(size=2.5) 
p2 <- ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar() +
  theme(axis.text.x = element_text(angle=70, vjust=0.5))

plots <- list(p1, p2)
do.call(cowplot::plot_grid, plots)