1

我想将几个 ggplot2 图表组合成一个使用cowplot::plot_grid(). 从其文档中:

?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)
4

2 回答 2

6

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))
于 2017-08-20T19:24:15.057 回答
-1

您想要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)
于 2020-10-12T15:51:47.163 回答