已经在for循环中制作的多个ggplot2图的网格

fst*_*ens 24 r ggplot2 r-grid

作为一个新的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])
}}
Run Code Online (Sandbox Code Playgroud)

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

display_in_a_grid(list_of_ggplot_plots)
Run Code Online (Sandbox Code Playgroud)

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

关于我看过的事情:

包gridExtra中的"arrangeGrob"不起作用,因为它需要每个绘图的显式名称(例如:p1,p2,p3,...),如http://code.google.com/p/gridextra/wiki/ arrangeGrob

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

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

谢谢,

弗朗索瓦

Jus*_*tin 42

我倾向于同意里奇,但如果你想自己安排:

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)
Run Code Online (Sandbox Code Playgroud)

看看最后的例子,找出?arrangeGrob完全消除for循环的方法:

plots = lapply(1:5, function(.x) qplot(1:10,rnorm(10),main=paste("plot",.x)))
require(gridExtra)
do.call(grid.arrange,  plots)
Run Code Online (Sandbox Code Playgroud)

  • 您的第一个示例在"qplot(c(1:10),c(10:1)+ i,main = i)"的情况下生成相同的图 (3认同)
  • 我将如何使用它来添加 grid.arrange 参数,例如 ncol、nrow、高度、宽度等。 (2认同)