library(ggplot2)
df <- data.frame(x=1:10, y=rnorm(10))
p1 <- ggplot(df, aes(x,y)) + geom_point()
plist <- list(p1,p1,p1,p1,p1)
# In my real example,a plot function will fit a ggplot to a list of datasets
#and return a list of ggplots like the example above.
Saya ingin mengatur plot menggunakan grid.arrange()
in gridExtra
.
Bagaimana saya melakukan ini jika jumlah plot dalam plist
variabel?
Ini bekerja:
grid.arrange(plist[[1]],plist[[2]],plist[[3]],plist[[4]],plist[[5]])
tetapi saya membutuhkan solusi yang lebih umum. pikiran?
grid.arrange(plist[[1:length(plist)]], ncol = nCol))
Saya mendapatkan kesalahan seperti ini:Error in hl.plots[[1:12]] : no such index at level 3
Terima kasih!x <- list(1,2); x[[3:1]]
. Lebih luas lagi, gunakan sesuatu sepertiplist[...]
daripadaplist[[...]]
melakukan subset Anda. Dan kemudian gunakando.call()
, yang harus kita gunakan karenagrid.arrange()
tidak diatur untuk mengambil daftar sebagai argumen pertamanya. Cheers, dan semoga sukses!Anda bisa menggunakan
grid.arrange()
danarrangeGrob()
dengan daftar selama Anda menentukan daftar menggunakangrobs =
argumen di setiap fungsi. Misalnya dalam contoh yang Anda berikan:library(ggplot2) library(gridExtra) df <- data.frame(x=1:10, y=rnorm(10)) p1 <- ggplot(df, aes(x,y)) + geom_point() plist <- list(p1,p1,p1,p1,p1) grid.arrange(grobs = plist, ncol = 2) ## display plot ggsave(file = OutFileName, arrangeGrob(grobs = plist, ncol = 2)) ## save plot
sumber
Demi kelengkapan (dan karena pertanyaan lama yang sudah dijawab ini dihidupkan kembali, baru-baru ini ) saya ingin menambahkan solusi menggunakan
cowplot
paket:cowplot::plot_grid(plotlist = plist, ncol = 2)
sumber
Error in ggplot_to_gtable(x) : Argument needs to be of class "ggplot" or "gtable"
ggplot2
paket atau grafik dasar?ggplot2
.grid.arrange
hampir berhasil untuk saya - tetapi, ternyata daftar plot saya tidak terisi. Saya memposting masalah sebagai pertanyaan: stackoverflow.com/questions/43216262/… . Jadi, saya bertanya-tanya apakah itu bisa menjadi masalah untuk cowplot jugaSaya tahu pertanyaannya secara khusus menyatakan menggunakan paket gridExtra , tetapi
wrap_plots
fungsi dari paket tambal sulam adalah cara terbaik untuk menangani daftar panjang variabel:library(ggplot2) # devtools::install_github("thomasp85/patchwork") library(patchwork) df <- data.frame(x=1:10, y=rnorm(10)) p1 <- ggplot(df, aes(x,y)) + geom_point() plist <- list(p1,p1,p1,p1,p1) wrap_plots(plist)
Hal yang berguna tentang itu adalah Anda tidak perlu menentukan berapa banyak kolom yang diperlukan, dan akan bertujuan untuk menjaga jumlah kolom dan baris tetap sama. Sebagai contoh:
plist <- list(p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1) wrap_plots(plist) # produces a 4 col x 4 row plot
sumber
devtools::install_github("thomasp85/patchwork")
?Untuk menyesuaikan semua plot dalam satu halaman, Anda dapat menghitung jumlah kolom dan baris seperti ini:
x = length(plots) cols = round(sqrt(x),0) rows = ceiling(x/cols)
Karena sebagian besar fungsi plotting memiliki ncol dan nrow sebagai argumen, Anda dapat meletakkannya di sana. Saya suka ggarrange dari ggpubr.
Ini mendukung lebih banyak baris daripada kolom, jadi sebaliknya jika Anda menginginkan yang sebaliknya. Yaitu untuk 6 plot maka akan memberikan 3 baris dan 2 kolom bukan sebaliknya.
sumber