2015-10-21 120 views
3

我有一個工作循環,它可以生成並保存目錄中保存的每個文件的單個繪圖。在同一頁上繪製多個ggplot2

我想將單個文件中的所有返回的圖作爲2x2網格在多個頁面上繪製,但無法做到這一點。

我試圖保存在列表中的情節對象

pltList <- list() 
pltList[] 

for (f in 1:length(files)){ 
plot_object <- ggplot2(...) #make ggplot2 plot 
print(plot_object) 
pltList[[f]] <- plot_object #save ggplot2 plot in list 
} 

jpeg(filename.jpg) 
par(mfrow=c(2,2)) #to generate 2x2 plot per page 
print(pltList[[1]]) 
print(pltList[[2]]) 
... 
print(pltList[[f]]) 
dev.off() 

的問題是,所產生的保存.jpg文件只包含最後一個情節,而不是所有地塊的2×2格到多個頁面,這是我想要的是。

編輯

我的第一個問題是如何各小區保存在列表中循環 - 我如何可以查看保存的對象從列表中,以確保它們已被正確地保存? 當我做print(pltList[1]),輸出結果是:

function (x, y, ...) 
UseMethod("plot") 
<bytecode: 0x0000000010f43b78> 
<environment: namespace:graphics> 

而不是實際的情節。看來這些地塊並沒有像預期的那樣被保存在列表中。我該如何糾正? 希望一旦這個問題得到解決,你的繪圖建議就可以發揮作用。

+0

有良好的功能做http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_%28ggplot2%29/ – Batanichek

+0

這裏有另一種可能的解決方案:http://statisticalrecipes.blogspot.com/2015/07/cowplot-arrange-ggplot2-figures-in-grid.html – ulfelder

+0

也許我錯過了我的答案。 「網頁上的所有地塊網格」是什麼意思? – Alex

回答

4

假設您需要一份PDF輸出,每一個頁面都有多條曲線繪製成一個,例如:如果有12個地塊則每頁4個地塊。

試試這個例子:

library(ggplot2) 
library(cowplot) 

# list of 12 dummy plots, only title is changing. 
pltList <- lapply(1:12, function(i){ 
    ggplot(mtcars,aes(mpg,cyl)) + 
    geom_point() + 
    ggtitle(paste("Title",i))}) 

# outputs 3 jpeg files with 4 plots each. 
for(i in seq(1,12,4)) 
ggsave(paste0("Temp",i,".jpeg"), 
     plot_grid(pltList[[i]], 
       pltList[[i+1]], 
       pltList[[i+2]], 
       pltList[[i+3]],nrow = 2)) 

# or we can output into 1 PDF with 3 pages using print 
pdf("TempPDF.pdf") 
for(i in seq(1,12,4)) 
    print(plot_grid(pltList[[i]], 
      pltList[[i+1]], 
      pltList[[i+2]], 
      pltList[[i+3]],nrow = 2)) 
dev.off() 

編輯:

使用gridExtra的另一種方式,如@ user20650建議:

library(gridExtra) 

#output as PDF 
pdf("multipage.pdf") 

#use gridExtra to put plots together 
marrangeGrob(pltList, nrow=2, ncol=2) 

dev.off() 
+0

好,但我需要將所有3頁保存在一個文件中 – Bob

+1

@Bob請參閱編輯,我們不能有頁面在JPEG中,也許你需要PDF? – zx8754

+0

@ user20650看起來很有趣,你介意把這個作爲答案,不能使它工作。 '錯誤:情節應該ggplot2陰謀' – zx8754

6

我最近做的也一樣。我用grid.arrange()

library(ggplot2) 
library(gridExtra) 
library(grid) 

p1<-ggplot()+geom_line(aes(x=1:10,y=1:10)) 
p2<-ggplot()+geom_line(aes(x=1:10,y=1:10)) 
p3<-ggplot()+geom_line(aes(x=1:10,y=1:10)) 
p4<-ggplot()+geom_line(aes(x=1:10,y=1:10)) 
grid.arrange(p1,p2,p3,p4, ncol=1, top=textGrob("Multiple Plots", gp=gpar(fontsize=12, font = 2))) 

enter image description here

+1

如果這些圖是列表中的'do.call(grid.arrange,c(pltList,ncol = 2))' – user20650

相關問題