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()
print(ggplot())
?ggplot
penggunaanggsave()
, resolusi gambar jauh lebih tinggi. Apakah ada cara untuk menyimpan outputgrid.arrange()
dengan resolusi tinggi, seperti jika itu adalah satu plot yang disimpanggsave()
? Jika saya berikan misalnya opsipng(...,height=1600, width=2500)
gambar terlihat sangat buram.Jawaban:
grid.arrange
menggambar langsung di perangkat.arrangeGrob
, di sisi lain, tidak menggambar apa pun kecuali mengembalikan grobg
, yang bisa Anda lewatiggsave(file="whatever.pdf", g)
.Alasan kerjanya berbeda dari pada objek ggplot, di mana secara default plot terakhir disimpan jika tidak ditentukan, adalah bahwa ggplot2 secara tidak terlihat melacak plot terbaru, dan saya tidak berpikir
grid.arrange
harus mengacaukan penghitung ini secara pribadi ke paket.sumber
plot(g)
adalah tidak dengan cara yang benar untuk menampilkan gtable, penggunaangrid.draw(g)
sebagai gantinya.g <-arrangeGrob(...)
withprint(g)
Anda mendapatkan tabel teks yang mencantumkan objek grafik daripada grafik. Cobalahgrid.draw(g)
untuk membuat grafik sebagai grafik. -Saya memiliki beberapa masalah dengan proposal babptiste, tetapi akhirnya saya mendapatkannya. Inilah yang harus Anda gunakan:
# draw your plots plot1 <- ggplot(...) # this specifies your first plot plot2 <- ggplot(...) # this specifies your second plot plot3 <- ggplot(...) # this specifies your third plot #merge all three plots within one grid (and visualize this) grid.arrange(plot1, plot2, plot3, nrow=3) #arranges plots within grid #save g <- arrangeGrob(plot1, plot2, plot3, nrow=3) #generates g ggsave(file="whatever.pdf", g) #saves g
Ini seharusnya bekerja dengan baik.
sumber
Cara lain yang mudah untuk menyimpan grid.arrange ke file pdf adalah dengan menggunakan pdf ():
pdf("filename.pdf", width = 8, height = 12) # Open a new pdf file grid.arrange(plot1, plot2, plot3, nrow=3) # Write the grid.arrange in the file dev.off() # Close the file
Ini memungkinkan untuk menggabungkan hal-hal lain selain ggplots dalam pengaturan, seperti tabel ...
sumber
Saya pikir itu layak untuk ditambahkan. Saya mengalami masalah dengan hal di atas, dengan ggsave menghasilkan kesalahan: "plot harus menjadi plot ggplot2"
Berkat jawaban ini: Menyimpan grafik dengan ggsave setelah menggunakan ggplot_build dan ggplot_gtable Saya memiliki perubahan pada kode di atas.
# draw your plots plot1 <- ggplot(...) # this specifies your first plot plot2 <- ggplot(...) # this specifies your second plot plot3 <- ggplot(...) # this specifies your third plot #merge all three plots within one grid (and visualize this) grid.arrange(plot1, plot2, plot3, nrow=3) #arranges plots within grid #save ggsave <- ggplot2::ggsave; body(ggsave) <- body(ggplot2::ggsave)[-2]
Baris di atas diperlukan untuk memperbaiki kesalahan
g <- arrangeGrob(plot1, plot2, plot3, nrow=3) #generates g ggsave(file="whatever.pdf", g) #saves g
Sekarang bekerja dengan baik untuk saya.
sumber
Anda tidak perlu menggunakan ArrangeGrob, Anda dapat menetapkan hasil grid.arrange langsung ke plot dan menyimpannya menggunakan ggsave:
p3 <- grid.arrange(p1,p2, nrow = 1) ggsave("filename.jpg", p3)
sumber
Solusi sederhana lainnya: setelah Anda
grid.arrange()
grid.arrange(plot1, plot2, plot3, nrow=3)
Anda melakukan a
dev.copy()
dev.copy(pdf,"whatever.pdf") dev.off()
sumber
coba ini
ggsave("whatever.png", plot=grid.arrange(plot1, plot2, plot3, nrow=3), device=..., scale = ..., width =..., height = ..., units = "...", dpi = ...)
sumber