2011-05-20 115 views
3

我想創建很多我想以網格形式顯示的圖(簡單的x-y條形圖)。當我使用gridExtra軟件包的grid.arrange時,隨着繪圖數量的增加,每個單獨的繪圖都會縮小。有沒有辦法創建劇情畫布,以便跨越多個頁面而不縮小每個單獨的情節?安排多個ggplot2圖

從gridExtra一個簡單的例子:

require(ggplot2) 
require(gridExtra) 
plots = lapply(1:50, function(.x) qplot(1:10,rnorm(10),main=paste("plot",.x))) 
do.call(grid.arrange, plots) 

上面的代碼生成50次重複但它們會收縮以適應畫布。有沒有辦法避免這種情況?即使它們跨越多個頁面並且每個頁面將具有約9個左右的圖表?我對PNG或PDF文件格式很滿意。

在嘗試grid.arrange之前,我玩弄了這個站點的代碼示例:http://gettinggeneticsdone.blogspot.com/2010/03/arrange-multiple-ggplot2-plots-in-same.html並且遇到了同樣的問題。

我還沒有嘗試將不同的數據幀組合成一個具有劇情標識符的巨型數據幀。然後,我正在考慮刻畫劇情標識符,但我不確定它是否也會有縮小每個劇情的相同問題。

希望我的問題是清楚的...

感謝, -e

+3

的重複:http://stackoverflow.com/q/3398568/602276, – Andrie 2011-05-20 08:49:57

+3

你能你刻面?你可以用9個小組創建一個新的分面變量,並製作一個多頁面的pdf。 – Chase 2011-05-20 12:14:09

+0

@安德烈,謝謝!我正在尋找錯誤的關鍵字,並沒有發現該鏈接。在循環中使用pdf()和打印效果很好。我將把這個僞代碼放在答案中。 @Chase,這是個好主意。對於我的情況,我沒有將數據存儲在數據框中,因此我只是直接將它打印到循環內的pdf中。如果我有一個彙總的數據框,你的建議將會更好,因爲我不需要grid.arrange。謝謝! – Ecognium 2011-05-20 20:41:15

回答

7
library(gridExtra) 
library(ggplot2) 
my_func = function (d,filename = "filename.pdf") { 
    pdf(filename,width=14) # width = 14 inches 
    i = 1 
    plot = list() 
    for (n in names(d)) { 
     ### process data for plotting here #### 
     plot[[i]] = qplot(x, y, geom="bar", data = my_data,) 
     if (i %% 9 == 0) { ## print 9 plots on a page 
      print (do.call(grid.arrange, plot)) 
      plot = list() # reset plot 
      i = 0 # reset index 
     } 
     i = i + 1 
    } 
    if (length(plot) != 0) { ## capture remaining plots that have not been written out 
     print (do.call(grid.arrange, plot)) 
    } 
    dev.off() 
} 
+0

感謝您的工作示例。 – gjain 2013-12-12 01:27:17