J'essaye d'écrire une fonction qui trace un ggplot facet_wrap
parcelle sur plusieurs pages. C'est juste un hack, car cette fonctionnalité semble être sur la liste des choses à faire de la fonction ggplot2. Je fais quelques petits calculs pour trouver le nombre de pages dont j'ai besoin, le nombre de lignes de mon data.frame
dont j'ai besoin par page, etc. Je suis plutôt confiant que tout cela fonctionne.R + ggplot: traçage sur plusieurs pages
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()
Mon problème est que, en enveloppant le tout dans une boucle comme celui-ci, entre les fonctions pdf()
et dev.off()
, est que la boucle ne semble pas attendre ggplot pour faire sa chose, et flammes à travers sa boucle très rapidement et sort un PDF invalide.
Si je mets i = 1
, démarrez le pdf()
, exécutez le code ci-dessus dans la boucle, puis définissez i=2
, puis exécutez le code, et ainsi de suite jusqu'à ce que je me ennuie (i=3
) Ensuite, éteignez l'appareil le PDF résultant est brillant.
Y a-t-il un moyen pour que la boucle for attende que la dernière ligne ait fini de tracer avant de passer à l'itération suivante?
wow qui fonctionne complètement. Je n'avais aucune idée que l'impression pourrait être utilisée comme ça. –
C'est parce que 'p' est un objet. La dernière ligne de votre code modifie l'objet 'p', mais vous voulez ensuite l'imprimer() sur le périphérique. – JoFrhwld
Ouais, c'est un obstacle commun. Parfois, j'écris une fonction dans ggplot2, et j'omets 'print()' autour de la partie finale, donc je n'ai pas de sortie ... – aL3xa