Печать в 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()
}
Ответы
Ответ 1
Чтобы нарисовать графики решетки на устройстве, нужно напечатать объект, созданный вызовом одной из функций графической графики. Обычно, при интерактивном использовании, R auto печатает объекты, если они не назначены. Однако в циклах автоматическая печать не работает, поэтому необходимо организовать печать объекта, как правило, обернув его в 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
.
Ответ 2
Является ли имя файла, содержащее "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()
}