我想保存一组不断变化的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。无论是否有函数,它都会返回相同的错误。如果我直接进入“情节”,它就有效......
我做错了什么?
(编辑示例所以有多个情节)
答案 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]])
}
如果要将绘图名称用作输出,或者为名称添加列表元素,可以将它们存储为已命名。