Estoy tratando de escribir una función que traza un diagrama ggplot facet_wrap
en varias páginas. Es solo un truco, ya que esta característica parece estar en la lista de tareas de la función ggplot2. Hago algunos pequeños cálculos para encontrar el número de páginas que voy a necesitar, el número de filas de mi data.frame
que necesito por página, etc. Estoy bastante seguro de que todo esto funciona.R + ggplot: trazado en varias páginas
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()
Mi problema es que, envolviéndolo todo en un bucle de este tipo, entre las pdf()
y dev.off()
funciones, es que el bucle no parece que esperar a que ggplot a hacer su cosa, y recorre su ciclo muy rápidamente y genera un PDF inválido.
Si fijo i = 1
, iniciar el pdf()
, ejecute el código anterior dentro del bucle, a continuación, establezca i=2
, a continuación, ejecute el código, y así sucesivamente hasta que me aburro (i=3
) y luego apague el dispositivo del PDF resultante es brillante.
¿Hay alguna manera de que el bucle for espere a que la línea final termine de trazar antes de pasar a la siguiente iteración?
wow que funciona completamente. No tenía idea de que la impresión se pudiera usar así. –
Es porque 'p' es un objeto. La última línea de tu código modifica el objeto 'p', pero luego quieres' imprimirlo() 'al dispositivo. – JoFrhwld
Sí, es un obstáculo común. A veces escribo una función en ggplot2, y omito 'print()' alrededor de la parte final, por lo tanto no obtengo salida ... – aL3xa