我想使用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)
答案 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)