我想循环绘图并将绘图的结果放在PDF
中。在for循环中打印到PDF
下面的代码来做到这一点:
这样做是从虹膜数据集循环3次,积3个不同的地块。然后它应该保存到C:/
驱动器。 PDF
文件已创建,但已损坏。
for(i in 1:3){
pdf(paste("c:/", i, ".pdf", sep=""))
plot(cbind(iris[1], iris[i]))
dev.off()
}
我想循环绘图并将绘图的结果放在PDF
中。在for循环中打印到PDF
下面的代码来做到这一点:
这样做是从虹膜数据集循环3次,积3个不同的地块。然后它应该保存到C:/
驱动器。 PDF
文件已创建,但已损坏。
for(i in 1:3){
pdf(paste("c:/", i, ".pdf", sep=""))
plot(cbind(iris[1], iris[i]))
dev.off()
}
要画格子地块设备上,需要通过打印到的点阵图形函数的调用产生的对象。通常,在交互式使用中,如果未分配,R会自动打印对象。但是,在循环中,自动打印不起作用,因此必须安排要打印的对象,通常通过将其包装在print()
中。
下面是一个例子(请原谅我的公式符号;-)的滥用:
require(lattice)
for(i in 1:3) {
pdf(paste("plot", i, ".pdf", sep = ""))
print(xyplot(iris[,1] ~ iris[,i], data = iris))
dev.off()
}
这将产生一个pdf
设备上的三个地块。
这是http:// cran的特例。r-project.org/doc/FAQ/R-FAQ.html#Why-do-lattice_002ftrellis-graphics-not-work_003f(有点难以弄清楚,因为原始海报给了我们什么可能不是他们真正的代码试图运行) – 2011-05-04 15:43:13
是在您的操作系统上包含“c:/”有效文件名的文件名?在调用pdf
之前,这看起来像是您想要设置的工作目录的一部分。我得到一个错误,告诉我它无法打开该文件:
Error in pdf(paste("c:/", i, ".pdf", sep = "")) :
cannot open file 'c:/1.pdf'
如果我把“C:/”从文件名位,正确地产生3个PDF文件。此外,如果您将dev.off()
移动到for循环外部,则会得到一个包含三个页面的PDF,而不是三个PDF。可能是也可能不是你想要的...
for(i in 1:3){
pdf(paste("plot", i,".pdf",sep=""))
plot(cbind(iris[1],iris[i]))
dev.off()
}
我如何设置我的r的工作目录? – 2011-05-04 10:58:44
'setwd()',例如:'setwd(“d:/my.dir”)'。 – 2011-05-04 11:01:46
@Sir Ksilem - 找出当前工作目录的位置,使用'getwd()'。要导航到不同的目录,使用'setwd('c:/ path/to/new/directory')'。我相信'setwd()'可以同时处理绝对和相对目录,但这可能与操作系统有关。帮助页面应该有更多的细节。 – Chase 2011-05-04 11:02:13
这适用于Linux上的我。 (无论如何,当在该系统上使用正确的路径时)。你真的给出的例子是你在做什么或者你在使用不同的绘图系统吗? Lattice或ggplot2是否存在?如果你是这样,那么你需要在'print()'中将绘图调用封装成自动打印,并且你需要打印lattice或ggplot对象来让它们绘制一些东西。 – 2011-05-04 10:55:53
是的,它们在格子中,但是这个也不起作用... – 2011-05-04 10:59:36
任何错误?我的意思是,正如@Chase在他的回答中提到的那样,是您的系统中有效的路径?如果你有写权限,那么只需保存到工作目录,然后按照@Chase所示删除路径。 – 2011-05-04 11:01:59