2010-08-03 15 views
22

Birden çok sayfa üzerinde bir ggplot facet_wrap çizimini çizmeye çalışan bir işlev yazmaya çalışıyorum. Bu özellik, ggplot2 özelliği yapılacaklar listesindeki gibi görünüyor. İhtiyacım olan sayfa sayısını, sayfa başına ihtiyacım olan data.frame numaralı satır sayısını bulmak için bazı küçük hesaplamalar yapıyorum.R + ggplot: Birden çok sayfa üzerinde çizim yapma

pdf(filename) 
for (i in seq(num_pages)){ 
    slice = seq(((i-1)*num_rows)+1,(i*num_rows)) 
    slice = slice[!(slice > nrow(df.merged))] 
    df.segment=df.merged[slice,] 
    p <- ggplot(df.segment, aes(y=mean,x=phenotype)) 
    p <- p + geom_bar(stat="identity",fill="white",colour="black") 
    p + facet_wrap("ID",scales="free_y",ncol=n_facets,nrow=n_facets) 
} 
dev.off() 

Benim sorunum, pdf() ve dev.off() fonksiyonları arasında, böyle bir for döngüsü içinde tüm kadar sararak, döngü için bir şey yapmak için ggplot beklemek görünmüyor olmasıdır, yani ve döngüsünden çok hızlı bir şekilde yanıp söner ve geçersiz bir PDF çıkarır. Ben i = 1 ayarlarsanız

, böylece ben alana kadar kod çalıştırmasına, i=2 set sonra, for döngüsü içinde yukarıdaki kodu çalıştırmak, pdf() başlatın ve (i=3) daha sonra ortaya çıkan PDF cihazı kapatmasına sıkılmış parlak.

Bir sonraki yinelemeye geçmeden önce son çizginin çizmeyi bitirmesini beklemek için for döngüsünü elde etmenin bir yolu var mı?

cevap

29

Sorun şu ki, for döngüsündeki cihaza gerçekten yazdırmak için son satırın (p + ...) etrafına print() gerek duyuyorsunuz. . .

+0

vay. Baskının böyle kullanılabileceği hakkında hiçbir fikrim yoktu. –

+0

Çünkü p 'bir nesnedir. Kodunuzun son satırı 'p' nesnesini değiştirir, ancak daha sonra cihaza' yazdırmak() 'yı istersiniz. – JoFrhwld

+0

Yup, bu yaygın bir engel. Bazen ggplot2'de bir işlev yazarım ve son bölümün etrafında print() 'ı atıyorum, bu yüzden çıktı almayın ... – aL3xa

4

Tam olarak. Ggplot2 kitabının Sayfa 39'u bize ggplot2 nesneleri oluşturduğunuzda, "Yazdırılabilir() ile ekranda gösterilebilir. Bu, etkileşimli olarak çalışırken otomatik olarak gerçekleşir, ancak bir döngü veya işlev içinde, yazdırmanız gerekir() Kendin " Tamamen işe yarayan

İlgili konular