2015-04-03 147 views
0

我在R中有一个脚本,使用ggplot2在同一个循环中创建不同的图。当循环结束时,我希望它在独特的图像中打印所有的图。R,如何通过使用ggplot2在循环之后在同一图像中绘制多个图?

这是代码的样子:

dim = 6; 
vectPlot = c(); 
for (i in 1:dim) 
{ 
    vectPlot[i] = qplot(...) 
} 

我需要的东西就像一个printManyPlotsInOneImage(vectPlot)' function. I tried with的multiplot()”,但没有工作(没有任何反应)。

你知道我该如何处理这个问题吗?

更新:我需要qplot()函数的输入来改变循环内部。 程序是这样的:

dim = 6; 
vectPlot = c(); 
dataArray = read.table(....) 
for (i in 1:dim) 
{ 
    vectPlot[i] = qplot(dataArray[i],...) 
} 

我怎么能在这种情况下lapply有效地使用?

+0

看到我更新的答案!我也编辑了我的earliet答案。我只给dim2分配“6”而不是1:6。固定的。现在lapply将“循环”分配给dim2的序列 – infominer 2015-04-06 16:39:47

回答

0

编辑您的代码地块分配给一个列表

dim2 = 1:6 #don't use dim, it's buil-in funtion 
vecPlot= lapply(dim2, 
       function(x) qplot(rnorm(20,x), 
       main = paste0("Histogram with mean = ",x))) 
       #modify qplot as appropriate 

你可以做的multiplot,但因为你的地块都在列表中,它不工作。 尝试本作的multiplot执行在列表

do.call(multiplot, vecPlot) 

我建议您阅读?do.call更好地了解发生了什么事情。 为了实现更好的控制,使用ncols,nrows(指定您想要的图形的列数和行数以及可能的常用标题)使用gridExtra包中的grid.arrage。您需要安装该软件包 试试这个

library(gridExtra) 
do.call(grid.arrange,vecPlot) 

最后回答您的问题更新

dim2 = 1:6; 
dataArray = read.table(....) 
vecPlot = lapply(dim2, function(x) { 
     qplot(dataArray[x],...) 
} 
+0

谢谢。不幸的是,他们都不工作。 grid.arrange()会产生这样的错误:''在arrangeGrob中发生错误(...,as.table = as.table,clip = clip,main main,:input必须是grobs!调用:histogramGenerator - > do.call - > - > grid.draw - > arrangeGrob另外:有12个警告(使用警告()看到它们)执行暂停',而多点()打印了很多数据行但没有产生图像 – 2015-04-03 17:51:07

+0

@ DavideChicco.it,看到我的更新的答案 – infominer 2015-04-03 18:18:43

+0

我明白了,但函数(x)和rnorm()的含义是什么?感谢 – 2015-04-03 18:39:10

相关问题