Печать в PDF в цикле - PullRequest
21 голосов
/ 04 мая 2011

Я хочу перебрать график и поместить результат графика в PDF.

Для этого используется следующий код:

То, что это делает, это цикл 3 раза и построение 3 разных графиков из набора данных радужной оболочки. Затем он должен сохранить его на диск C:/. Файлы PDF созданы, но повреждены.

for(i in 1:3){
  pdf(paste("c:/", i, ".pdf", sep=""))
  plot(cbind(iris[1], iris[i]))
  dev.off()
}

Ответы [ 2 ]

51 голосов
/ 04 мая 2011

Чтобы нарисовать решетчатые графики на устройстве, нужно напечатать объект, полученный при вызове одной из графических функций решетки.Обычно при интерактивном использовании 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.

3 голосов
/ 04 мая 2011

Является ли имя файла с «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()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...