Saya mencoba untuk merencanakan beberapa plot menggunakan ggplot2, mengaturnya menggunakan grid.arrange(). Karena saya berhasil menemukan seseorang yang menjelaskan masalah sebenarnya yang saya miliki, saya telah mengutip dari deskripsi masalah dari tautan :
Ketika saya menggunakan ggsave()setelah grid.arrange(), yaitu
grid.arrange(sgcir1,sgcir2,sgcir3,ncol=2,nrow=2)
ggsave("sgcirNIR.jpg")
Saya tidak menyimpan plot grid tetapi ggplot individu terakhir. Apakah ada cara untuk benar-benar menyimpan plot seperti yang ditampilkan dengan grid.arrange()menggunakan
ggsave()atau yang serupa? Selain menggunakan cara lama
jpeg("sgcirNIR.jpg")
grid.arrange(sgcir1,sgcir2,sgcir3,ncol=2,nrow=2)
dev.off()
Tautan yang sama memberikan solusi di bawah ini:
require(grid)
require(gridExtra)
p <- arrangeGrob(qplot(1,1), textGrob("test"))
grid.draw(p) # interactive device
ggsave("saving.pdf", p) # need to specify what to save explicitly
Namun, saya tidak tahu cara menggunakan ggsave()untuk menyimpan output grid.arrange()panggilan dalam kode berikut, yang diambil dari tautan :
library(ggplot2)
library(gridExtra)
dsamp <- diamonds[sample(nrow(diamonds), 1000), ]
p1 <- qplot(carat, price, data=dsamp, colour=clarity)
p2 <- qplot(carat, price, data=dsamp, colour=clarity, geom="path")
g_legend<-function(a.gplot){
tmp <- ggplot_gtable(ggplot_build(a.gplot))
leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
legend <- tmp$grobs[[leg]]
return(legend)}
legend <- g_legend(p1)
lwidth <- sum(legend$width)
## using grid.arrange for convenience
## could also manually push viewports
grid.arrange(arrangeGrob(p1 + theme(legend.position="none"),
p2 + theme(legend.position="none"),
main ="this is a title",
left = "This is my global Y-axis title"), legend,
widths=unit.c(unit(1, "npc") - lwidth, lwidth), nrow=1)
# What code to put here to save output of grid.arrange()?
png(); grid.arrange(); ggplot(); ggplot(); dev.off()