Realmente apreciaría su ayuda con el siguiente problema. Conozco varias maneras de guardar un solo diagrama en un archivo. Mi pregunta es: ¿Cómo guardo correctamente un multiplot en un archivo?R - guardar multiplo en el archivo
Para empezar, no soy un usuario de R con experiencia. Yo uso ggplot2 para crear mis tramas, y otra cosa que probablemente debería mencionar es que uso la GUI de RStudio. Usando un example del R Cookbook, puedo crear múltiples gráficos en una ventana.
Me gustaría guardar este llamado multiplot en un archivo (preferiblemente como jpeg), pero de alguna manera no lo hago.
estoy creando el G. múltiple de la siguiente manera:
##define multiplot function
multiplot <- function(..., plotlist=NULL, cols) {
require(grid)
# Make a list from the ... arguments and plotlist
plots <- c(list(...), plotlist)
numPlots = length(plots)
# Make the panel
plotCols = cols # Number of columns of plots
plotRows = ceiling(numPlots/plotCols) # Number of rows needed, calculated from # of cols
# Set up the page
grid.newpage()
pushViewport(viewport(layout = grid.layout(plotRows, plotCols)))
vplayout <- function(x, y)
viewport(layout.pos.row = x, layout.pos.col = y)
# Make each plot, in the correct location
for (i in 1:numPlots) {
curRow = ceiling(i/plotCols)
curCol = (i-1) %% plotCols + 1
print(plots[[i]], vp = vplayout(curRow, curCol))
}
}
## define subplots (short example here, I specified some more aesthetics in my script)
plot1a <- qplot(variable1,variable2,data=Mydataframe1)
plot1b <- qplot(variable1,variable3,data=Mydataframe1)
plot1c <- qplot(variable1,variable2,data=Mydataframe2)
plot1d <- qplot(variable1,variable3,data=Mydataframe2)
## plot in one frame
Myplot <- multiplot(plot1a,plot1b,plot1c,plot1d, cols=2)
Esto da el resultado deseado. El problema surge cuando intento guardar en un archivo. Puedo hacerlo manualmente en RStudio (usando Exportar -> Guardar gráfico como imagen), pero me gustaría ejecutar todo en un script. Logro guardar solo subplot1d (que es last_plot()), y no el multiplot completo.
Lo que he probado hasta ahora:
Usando ggsave
ggsave(filename = "D:/R/plots/Myplots.jpg")
Esto da como resultado solamente 1d subtrama siendo salvados.
Usando jpeg(), print() y dev.off()
jpeg(filename = "Myplot.jpg", pointsize =12, quality = 200, bg = "white", res = NA, restoreConsole = TRUE) print(Myplot) dev.off()
Esto da lugar a una imagen completamente blanco (sólo el fondo supongo). print (Myplot) devuelve NULL.
No estoy seguro de lo que estoy haciendo mal aquí. Mi falta de comprensión R es la razón por la que estoy atrapado tratando de encontrar una solución. ¿Alguien puede explicar lo que estoy haciendo mal y quizás sugerir una forma de resolver mi problema?
También puede usar ** gridExtra :: grid.arrange (plot1a, plot1b, plot1c, plot1d, ncol = 2) ** – dickoa
El paquete gridExtra no contiene grid.arrange, sí contiene arrangeGrob que parece proporcionar la misma funcionalidad. También parece recordar una función llamada grid.arrange, tal vez el autor cambió los títulos de las funciones en el paquete. –
'grid.arrange' debe estar en gridExtra. Incidentemente, uno de los beneficios de 'arrangeGrob' vs' multiplot' es que es compatible con 'ggsave', y que puede almacenar el grob compuesto para su uso posterior. – baptiste