我想循环绘制一个情节,并将情节结果放在PDF
。
以下代码用于执行此操作:
这样做是循环3次并从虹膜数据集中绘制3个不同的图。然后它应该将其保存到C:/
驱动器。 PDF
文件已创建,但已损坏。
for(i in 1:3){
pdf(paste("c:/", i, ".pdf", sep=""))
plot(cbind(iris[1], iris[i]))
dev.off()
}
答案 0 :(得分:50)
要在设备上绘制点阵图,需要打印通过调用其中一个点阵图形函数生成的对象。通常,在交互式使用中,如果未分配,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
设备上生成三个图。
答案 1 :(得分:3)
在您的操作系统上包含“c:/”的文件名是否为有效的文件名?这看起来像是在调用pdf
之前要设置的工作目录的一部分。我收到错误告诉我它无法打开该文件:
Error in pdf(paste("c:/", i, ".pdf", sep = "")) :
cannot open file 'c:/1.pdf'
如果从文件名中删除“c:/”位,则会正确生成三个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()
}