Byłbym wdzięczny za pomoc w następującym problemie. Znam kilka sposobów na zapisanie pojedynczego wykresu w pliku. Moje pytanie brzmi: Jak poprawnie zapisać plik multiplot?R - zapisz multiplot do pliku
Na początku nie jestem doświadczonym użytkownikiem R. Używam ggplot2 do tworzenia moich działek, a inną rzeczą, o której powinienem wspomnieć, jest to, że używam GUI RStudio. Korzystając z example z książki kucharskiej R, mogę utworzyć wiele wątków w jednym oknie.
Chciałbym zapisać ten tak zwany multiplot do pliku (najlepiej jako jpeg), ale jakoś nie udało się tego zrobić.
Tworzę ten multiplot następująco:
##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)
To daje pożądanego rezultatu. Problem pojawia się, gdy próbuję zapisać do pliku. Mogę to zrobić ręcznie w RStudio (używając Export -> Save plot as image), ale chciałbym uruchomić wszystko w skrypcie. Udaje mi się tylko zapisać subplot1d (który jest last_plot()), a nie cały multiplot.
Co próbowałem dotąd:
Korzystanie ggsave
ggsave(filename = "D:/R/plots/Myplots.jpg")
Skutkuje to tylko subplot 1d zapisywane.
Korzystanie JPEG(), print() i() dev.off
jpeg(filename = "Myplot.jpg", pointsize =12, quality = 200, bg = "white", res = NA, restoreConsole = TRUE) print(Myplot) dev.off()
Wynika to w zupełnie biały obraz (tylko tłem zakładam). print (Myplot) zwraca NULL.
Nie jestem pewien, co robię źle tutaj. Mój brak zrozumienia R jest powodem, dla którego utknąłem, próbując znaleźć rozwiązanie. Czy ktoś może wyjaśnić, co robię źle, a może zaproponować sposób rozwiązania mojego problemu (problemów)?
Możesz także użyć ** gridExtra :: grid.aranżacja (działka1a, wykres1b, wykres1c, wykres1d, ncol = 2) ** – dickoa
Pakiet gridExtra nie zawiera grid.arrange, zawiera structGrob, który wydaje się zapewniać taką samą funkcjonalność. Wydaje mi się też, że pamiętam funkcję o nazwie grid.arrange, może autor zmienił tytuły funkcji w pakiecie. –
'grid.arrange' powinno znajdować się w gridExtra. Nawiasem mówiąc, jedną z zalet 'arrangeGrob' vs' multiplot' jest to, że jest kompatybilny z 'ggsave', i że możesz przechowywać kompozytowy grob do późniejszego użycia. – baptiste