Próbuję napisać funkcję, która kreśli wykres ggplot facet_wrap
na wielu stronach. To po prostu hack, ponieważ ta funkcja wydaje się znajdować na liście zadań funkcji ggplot2. Wykonuję małe obliczenia, aby znaleźć liczbę stron, których potrzebuję, liczbę rzędów mojego data.frame
potrzebnych na stronę itd. Jestem przekonany, że to wszystko działa.R + ggplot: drukowanie na wielu stronach
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()
Mój problem polega na tym, owijając to wszystko w pętli for jak ta, w między funkcjami pdf()
i dev.off()
, jest to, że na pętli nie wydaje się czekać na ggplot zrobić jego rzecz, i bardzo szybko przechodzi przez pętlę, a następnie generuje nieprawidłowy plik PDF.
Jeżeli ustawić i = 1
, uruchom pdf()
uruchomić powyższy kod wewnątrz pętli, a następnie ustawić i=2
, a następnie uruchomić kod, i tak dalej, dopóki nie znudzi (i=3
), a następnie wyłączyć urządzenie otrzymany PDF jest znakomity.
Czy istnieje sposób, aby uzyskać pętlę for, aby czekać na końcową linię, aby zakończyć drukowanie przed przejściem do następnej iteracji?
wow, który działa całkowicie. Nie miałem pojęcia, że druk może być używany w ten sposób. –
To dlatego, że 'p' jest obiektem. Ostatnia linia twojego kodu modyfikuje obiekt 'p', ale wtedy chcesz' print() 'go do urządzenia. – JoFrhwld
Tak, to powszechna przeszkoda. Czasami piszę funkcję w ggplot2 i pomijam 'print()' wokół ostatniej części, więc nie otrzymuję żadnego wyjścia ... – aL3xa