在列表中收集大量的ggplots以保存到单独的png文件?

时间:2016-06-23 12:19:30

标签: r ggplot2 save png

我写了一个函数,其中生成了很多图。我想将所有这些绘图存储在单独的png文件中,但如果我不想通过png()逐个执行此操作,我不明白该怎么做。

基本上我的代码看起来类似于下面的代码,虽然图中的变量和其他功能不是那么规律(然后我会写一个for循环):

make_graphs <-function(MyData){
a <- ggplot(data = MyData, aes(y = Y1, x = X)) + geom_point()  
b <- ggplot(data = MyData, aes(y = Y2, x = X)) + geom_point()  
c <- ggplot(data = MyData, aes(y = Y3, x = X)) + geom_point()   
d <- ggplot(data = MyData, aes(y = Y4, x = X)) + geom_point() 

#...etc...

x <- ggplot(data = MyData, aes(y = Y24, x = X)) + geom_point()   
y <- ggplot(data = MyData, aes(y = Y25, x = X)) + geom_point()  
Z <- ggplot(data = MyData, aes(y = Y26, x = X)) + geom_point()  

# Here I need some way to collect all the plots a-z and write them to files.

}

make_graphs(MyData)

简而言之,我正在寻找一种方法来生成我分配给a-z的图表列表,这样我就可以使用该列表保存为png。手工制作一个列表对我来说不起作用:我的绘图名称比a-z更复杂,并且将更多的绘图添加到函数中 - 我不想手动将它们添加到列表中。

你有什么想法怎么做?

列出清单后,我计划执行this

之类的操作
plotlist = mget(plots)
pdf("all.pdf")
invisible(lapply(plotlist, print))
dev.off()

this

lapply(names(plots), 
function(x)ggsave(filename=paste(x,".jpeg",sep=""), plot=plots[[x]]))

1 个答案:

答案 0 :(得分:1)

这应该有效:

plotlist = lapply(1:26,function(i) 
   ggplot(data = MyData, aes_string(y = paste0('Y',i), x = 'X')) + geom_point()

这给了你清单。现在您可以使用它来保存文件:

lapply(1:26, function(i)
   ggsave(filename=paste0("your_path",i,".jpeg"), plot=plotlist[[x]]))

根据Roland的建议编辑aes_string()