30

作为一个新的 ggplot2 用户,我对可能性的数量有点迷茫,并且很难在网上找到一个我认为是一个简单问题的简单答案。

我想在同一张纸上显示来自 ggplot2 的多个图,但知道这些图来自 for 循环。

以下示例未编译,仅用于说明:

for(i in c(1:n)){                                   
  for(j in c(1:m)){
    ..........  # some data production
    p <- ggplot(df.all) + geom_bar(aes_string(x=class.names[i],fill=var.names[j])
}}

在这里, p 被覆盖了,但我希望有一个矩阵或一个列表,我可以在其中放置所有生成的 p,然后是一个简单的函数,例如

display_in_a_grid(list_of_ggplot_plots)

但据我尝试,我无法制作绘图矩阵列表,也无法找到只接受一个参数作为输入的函数。

关于我看过的东西:

包 gridExtra 中的“arrangeGrob”不起作用,因为它需要每个图的明确名称(例如:p1,p2,p3,...),如http://code.google.com/p/gridextra/wiki/安排格罗布

ggplot2 的“方面”方法不适合我的数据集的组织(或相反:p)

你有一个简单的方法来管理这个吗?

谢谢,

弗朗索瓦

4

2 回答 2

56

我倾向于同意 Richie 的观点,但如果你想自己安排:

library(gridExtra)
library(ggplot2)
p <- list()
for(i in 1:4){
  p[[i]] <- qplot(1:10,10:1,main=i)
}
do.call(grid.arrange,p)

看一下 for 方法末尾的示例,?arrangeGrob以完全消除 for 循环:

plots = lapply(1:5, function(.x) qplot(1:10,rnorm(10),main=paste("plot",.x)))
require(gridExtra)
do.call(grid.arrange,  plots)
于 2012-02-16T17:42:21.893 回答
-1

这是我的解决方案。参数为的ggplot函数中的微小变化。mappingaes_string

library(gridExtra)
library(ggplot2)
p <- list()
for(i in 1:4){
p[[i]] <- ggplot(data=df,aes_string(x=df$x,y=df$y) +geom_bar(aes_string(x=class.names[i],fill=var.names[j])
}
do.call(grid.arrange,p)

希望这可以帮助!

于 2018-08-21T10:08:03.563 回答