将几个ggplots保存到文件中

时间:2014-10-21 20:09:37

标签: r string ggplot2 concatenation

我想保存一组不断变化的ggplot是不同的文件。要做到这一点,我使用for循环看起来像这样:

save = c("plot1","plot2")
for (i in 1:length(save)){
  ggsave(cat(save[i],"\n"), file="i.pdf")
}

“plot1”和“plot2”正在处理ggplots(=绘图对象的名称)。因为我收到以下错误:

Error in ggsave(cat(save[i], "\n"), file = "i.pdf") : 
  plot should be a ggplot2 plot

我尝试了cat-function。无论是否有函数,它都会返回相同的错误。如果我直接进入“情节”,它就有效......

我做错了什么?

(编辑示例所以有多个情节)

2 个答案:

答案 0 :(得分:4)

您需要在ggsave中指定参数图:

ggsave(plot = plot, file = "save.pdf")

如果你有几个ggplot,你需要先将它们保存在列表中。

plotlist = list()
plotlist[[1]] = plot1
plotlist[[2]] = plot2

等。或任何其他方式。一旦你最终得到列表,你可以循环它:

for(i in 1:2){
  ggsave(plot = plot[[i]], file = paste("file",i,".pdf",sep=""))
}

这将为你节省file1 file2等中的情节。

答案 1 :(得分:3)

您可以使用get根据名称获取对象:

library(ggplot2)

plot_1 <- qplot(mpg, wt, data = mtcars)
plot_2 <- qplot(mpg, wt, data = mtcars, geom="path")
plot_3 <- qplot(mpg, data = mtcars, geom = "dotplot")

plot_names <- c("plot_1", "plot_2", "plot_3")

for (i in 1:length(plot_names)) {
  ggsave(filename=sprintf("%s.pdf", plot_names[i]), 
         plot=get(plot_names[i]))
}

但是,你最好将你的情节存储在list并迭代列表元素:

plots <- list(length=3)
plots[[1]] <- qplot(mpg, wt, data = mtcars)
plots[[2]] <- qplot(mpg, wt, data = mtcars, geom="path")
plots[[3]] <- qplot(mpg, data = mtcars, geom = "dotplot")

for (i in 1:length(plots)) {
  ggsave(filename=sprintf("plot%d.pdf", i), 
         plot=plots[[i]])
}

如果要将绘图名称用作输出,或者为名称添加列表元素,可以将它们存储为已命名。