[英]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.