2015-04-03 143 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

相關問題