2012-09-26 11 views
5

Chciałbym wydrukować wiele wykresów w jednym pliku PDF. Wiem, że było na tym dużo, ale chciałbym wydrukować różne rozmiary okna/wykresu dla każdej strony, tj. Pierwsza strona to 8,5 x 11, druga strona 11 x 8,5 itd. Próbowałem to:wiele wykresów pdf R

pdf(file="Combined_Graphs.pdf",onefile=TRUE,bg="white",width=8.5,height=11) 
hist(rnorm(100)) 
pdf(file="Combined_Graphs.pdf",onefile=TRUE,width=11, height=8.5, bg="white") 
hist(rnorm(100,10,2),col="blue") 
dev.off() 

muszę używać onefile=TRUE źle, jak to tylko generuje grafikę ostatni przed zamknięciem. Czy istnieje lepszy sposób na skalowanie urządzenia graficznego bez konieczności wywoływania funkcji pdf dwa razy?

Odpowiedz

7

Co mogę zrobić, to przygotować oddzielne pliki PDF i połączyć je później. Używam do tego the PDF toolkit. Zawijania to w funkcji R za pomocą wywołania systemowego poprzez system nawet sprawia, że ​​skrypty z R. Wywołanie pdftk będzie wyglądać następująco:

pdftk *pdf cat output combined.pdf 

lub R:

system("pdftk *pdf cat output combined.pdf") 

combine_pdfs = function(path, output_pdf) { 
    system(sprintf("pdftk %s/*pdf cat output %s"), path, output_pdf) 
} 
+0

Dzięki !!! To jest niesamowite, działa bardzo dobrze i nigdy nie muszę używać programu Adobe Acrobat ponownie :) – austin

+0

Możesz zrobić wszystkie rodzaje schludnych rzeczy z pdftk. Uruchamianie go z wiersza poleceń ułatwia pisanie skryptów, np. cięcie plików pdf składających się z podraportów o nierównej długości. –

+0

Jeśli odpowiedź na to pytanie została rozwiązana, zaznacz zielony znacznik wyboru. –

4

myślę co Cię próbujemy zrobić, nie da się zrobić w R, tzn. musisz użyć narzędzi zewnętrznych, takich jak zestaw narzędzi do plików PDF, zgodnie z sugestią Paula Hiemstry, aby połączyć oddzielne pliki PDF z różnymi wymiarami strony (alternatywnym narzędziem jest PDFjam).

Jeśli ustawisz onefile = TRUE w wywołaniu pdf(), każdej powierzchni, co jest napisane na tym urządzeniu PDF zostanie wydrukowany na oddzielnej stronie, ale o tych samych wymiarach stronie. W tym przykładzie otwierasz pierwsze urządzenie PDF, piszesz na nim jeden wykres, następnie otwierasz drugie urządzenie PDF, piszesz na nim inny wykres, a następnie zamykasz drugie urządzenie PDF, ale pozostawiasz otwarte pierwsze urządzenie PDF. Ponieważ używasz tego samego argumentu file dla obu połączeń , możesz nie zauważyć, że pierwsze urządzenie PDF jest wciąż otwarte. Jeśli go zamkniesz, tylko pierwszy dział zakończy się "Combined_Graphs.pdf".

Tutaj jest zmodyfikowaną wersją swojej przykład, który ilustruje jak urządzenia PDF są otwarte, wypełnione treścią, a zamknięty:

pdf(file = "foo.pdf", onefile = TRUE, width = 8.5, height = 11) 
hist(rnorm(100)) 
hist(rnorm(100, 10, 2), col = "red") 
pdf(file = "bar.pdf", width =11, height = 8.5) 
hist(rnorm(100, 10, 2), col = "blue") 
dev.off() 
dev.off() 
Powiązane problemy