2012-09-26 27 views
5

Bir pdf dosyasında birden grafikleri yazdırmak istiyorum. Bunun üzerinde çok şey olduğunu biliyorum, ancak her sayfa için farklı pencere/grafik boyutları basmak istiyorum, yani ilk sayfa 8.5x11, ikinci sayfa 11x8.5 vb. Denedim bu:birden grafikler 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() 
Ben kullanıyor olması gerekir

sadece kapatmadan önce son grafiği oluşturur yanlış olarak onefile=TRUE. Pdf işlevini iki kez çağırmak zorunda kalmadan grafik aygıtı boyutlandırmak için daha iyi bir yol var mı? Ben ne yapardım

cevap

7

ayrı PDF'ın üretmek ve bunları daha sonra bunları birleştirmek olduğunu. Bunun için the PDF toolkit kullanıyorum. system üzerinden bir sistem çağrısı kullanarak bir R fonksiyonunda bu tamamlayan hatta pdftk çağrısı gibi bir şey olacaktır R. gelen bu script yapar:

pdftk *pdf cat output combined.pdf 

veya 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

Teşekkür !!! Bu çok iyi çalışıyor, müthiş ve ben tekrar :) – austin

+0

Sen PDFTK ile düzgün şeyler her türlü yapabilirsiniz Adobe Acrobat kullanmak zorunda kalmazsınız. Komut satırından yürütmek, komut dosyasını, örn. Eşit olmayan uzunluktaki alt raporlardan oluşan pdf'leri kesiyor. –

+0

Bu cevap sorunuzu çözdüyse, lütfen yeşil onay işaretini kontrol etmek için çekinmeyin. –

4

ne düşündüğümü yani R yapılamaz yapmaya çalışıyoruz, Paul ise Hiemstra önerdiği gibi değişen sayfa boyutları (alternatif bir araç PDFjam olan) ayrı bir PDF dosyaları birleştirmek için böyle bir PDF araç seti gibi harici araçları kullanmak gerekir.

Arayanıza onefile = TRUE ayarını pdf() olarak ayarlarsanız, bu PDF aygıtına yazılan her bir grafik, aynı sayfa boyutlarına sahip ayrı bir sayfaya yazdırılır. senin örnekte, bir ilk PDF cihazını açmak için, o zaman ikinci bir PDF cihazı açıp bir arsa yazma, buna farklı bir arsa yazmak ve daha sonra ikinci bir PDF cihazı kapatmak ama açık ilk PDF cihazı bırakın. Her iki pdf() aramalar için aynı file argüman kullandığınız için, ilk PDF cihazı hala açık olduğunu fark olmayabilir. Eğer kapatırsanız, sadece ilk arsa, "Combined_Graphs.pdf" ile sonuçlanacaktır.

Burada PDF cihazları, açılmış içeriği dolu ve kapalı nasıl göstermektedir senin örnek değiştirilmiş bir versiyonudur:

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()