Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将多个GGPLOT保存到文件中_R_String_Ggplot2_Concatenation - Fatal编程技术网

R 将多个GGPLOT保存到文件中

R 将多个GGPLOT保存到文件中,r,string,ggplot2,concatenation,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”是工作GGPLOT(=打印对象的名称)。因为我得到了以下错误: Error in ggsave(cat(save[i], "\n"), file = "i.pdf") : plot sh

我想保存一组不同的ggplot文件。为此,我使用了一个类似以下内容的for循环:

save = c("plot1","plot2")
for (i in 1:length(save)){
  ggsave(cat(save[i],"\n"), file="i.pdf")
}
“plot1”和“plot2”是工作GGPLOT(=打印对象的名称)。因为我得到了以下错误:

Error in ggsave(cat(save[i], "\n"), file = "i.pdf") : 
  plot should be a ggplot2 plot
我试过猫的功能。它返回带或不带函数的相同错误。如果我直接进入“绘图”,它会工作

我做错了什么


(对示例进行了编辑,以便有多个绘图)

您需要在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等中保存绘图。

您需要在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等中保存绘图。

您可以使用
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]))
}

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

可以使用
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]))
}


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

c(“绘图”)
是单元素字符向量。您正在将一个带换行符的字符串传递到
ggsave
的第一个参数中,该参数需要文件名。但是,如果此vetor中有多个元素,例如save=c(“plot1”、“plot2”),我将如何执行此操作?能否显示更多的代码?这些是绘图对象的名称吗?是的,它们是绘图对象的名称…如果不清楚,很抱歉
cat
始终返回NULL,并且只会对打印到控制台产生副作用。在函数中使用它作为参数是完全不合适的。
c(“plot”)
是一个单元素字符向量。您正在将一个带换行符的字符串传递到
ggsave
的第一个参数中,该参数需要文件名。但是,如果此vetor中有多个元素,例如save=c(“plot1”、“plot2”),我将如何执行此操作?能否显示更多的代码?这些是绘图对象的名称吗?是的,它们是绘图对象的名称…如果不清楚,很抱歉
cat
始终返回NULL,并且只会对打印到控制台产生副作用。在函数中使用它作为参数是完全不合适的。这对我很有用。谢谢不过,还有一件事……如何根据列表元素命名文件?与plot1.pdf、plot2.pdf一样,上述代码将另存为file1.pdf、file2.pdf等。如果您将行更改为:
ggsave(plot=plot[[i]],file=paste(“plot”,i,.pdf),sep=”“)
它将另存为plot1.pdf plot2.pdf等。尝试运行
i=1
,然后
粘贴(“plot”,i,.pdf”,sep=“”))
您会明白,粘贴只会使用索引iso创建一个正确名称的文件,我无法从列表中获取字符串?假设我们谈论的不是plot1和plot2,而是abc和def。文件名如何为abc.pdf和def.pdf?您可以通过执行以下操作明确使用列表中的名称:
ggsave(plot=plot[[i]],file=paste(names(plotlist)[i],“.pdf”,sep=”“)
这就是您要查找的吗?默认情况下,列表没有任何名称。创建列表时,您可以添加它们:
plotlist[[1]]=plot1
然后您可以添加名称
names(plotlist)[1]=“nameplot1”
您可以用任何您想要的内容替换nameplot1,对列表中的所有项目重复该操作(在上述情况下2)。您也可以在使用绘图填充列表后通过以下方式一次性定义名称:
names(plotlist)=c(“name1”、“name2”)
。运行for循环现在应该可以执行您想要的操作;)这对我有用。谢谢不过,还有一件事……如何根据列表元素命名文件?与plot1.pdf、plot2.pdf一样,上述代码将另存为file1.pdf、file2.pdf等。如果您将行更改为:
ggsave(plot=plot[[i]],file=paste(“plot”,i,.pdf),sep=”“)
它将另存为plot1.pdf plot2.pdf等。尝试运行
i=1
,然后
粘贴(“plot”,i,.pdf”,sep=“”))
您会明白,粘贴只会使用索引iso创建一个正确名称的文件,我无法从列表中获取字符串?假设我们谈论的不是plot1和plot2,而是abc和def。文件名如何为abc.pdf和def.pdf?您可以通过执行以下操作明确使用列表中的名称:
ggsave(plot=plot[[i]],file=paste(names(plotlist)[i],“.pdf”,sep=”“)
这就是您要查找的吗?默认情况下,列表没有任何名称。创建列表时,您可以添加它们:
plotlist[[1]]=plot1
然后您可以添加名称
names(plotlist)[1]=“nameplot1”
您可以用任何您想要的内容替换nameplot1,对列表中的所有项目重复该操作(在上述情况下2)。您也可以在使用绘图填充列表后通过以下方式一次性定义名称:
names(plotlist)=c(“name1”、“name2”)
。运行for循环现在应该可以执行您想要的操作;)