簡體   English   中英

在同一頁面上繪制多個ggplot2

[英]Plot multiple ggplot2 on same page

我有一個工作循環,它可以生成並保存目錄中保存的每個文件的各個圖。

我想將單個文件中的所有返回的繪圖繪制為多個頁面上的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文件只包含最后一個圖,而不是所有圖上的所有圖的2x2網格,這就是我想要的。

編輯

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

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

而不是實際的情節。 看起來這些圖未按預期保存在列表中。 我怎么能糾正這個? 希望,一旦修復,您的繪圖建議將起作用。

我最近做了同樣的事情。 我用了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)))

在此輸入圖像描述

假設您需要一個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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM