Pertama, beberapa grafik tiruan:
df <- data.frame(x = 1:10, y = 2:11)
Karena grafik saya yang sebenarnya cukup rumit, saya tidak akan menyajikannya di sini, tetapi akan menggunakan grafik lain yang mereproduksi masalah tersebut. Cukuplah untuk mengatakan bahwa ketika align
disetel ke "hv"
di plot_grid
, itu menciptakan banyak ruang kosong di antara grafik saya. Untuk memperbaikinya, saya mengatur margin pada plot asli seperti ini:
library(ggplot2)
plot1 <- ggplot(df, aes(x = x, y = y)) +
geom_point() +
theme(plot.margin = unit(c(-1, 0, 0, 0), "cm"))
plot2 <- ggplot(df, aes(x = y, y = -x)) +
geom_point() +
theme(plot.margin = unit(c(-1, 0, 0, 0), "cm"))
plot3 <- ggplot(df, aes(x = x, y = y)) +
geom_point() +
theme(plot.margin = unit(c(-1, 0, 0, 0), "cm"))
plot4 <- ggplot(df, aes(x = y, y = -x)) +
geom_point() +
theme(plot.margin = unit(c(-1, 0, 0, 0), "cm"))
Yang memanjangkan bagian atas plot sehingga memenuhi ruang putih. Semuanya bagus dan keren (dalam contoh ini, mungkin ada sedikit tumpang tindih antara bagian atas dan bawah):
library(cowplot)
plot5 <- plot_grid(plot1, plot2, plot3, plot4, nrow = 2, ncol = 2,
align = "hv")
plot5
Sampai saya mencoba menambahkan label. Karena saya telah memperluas plotnya, saya ingin menambahkan label lebih tinggi dari batas y = 1
.
plot5 <- plot_grid(plot1, plot2, plot3, plot4, nrow = 2, ncol = 2,
align = "hv", labels = c("A", "B", "C", "D"),
label_x = 0.1,
label_y = 1.15)+
theme(plot.margin = unit(c(3, 1, 1, 1), "cm"))
plot5
Mengembalikan peringatan ini:
Removed 1 rows containing missing values (geom_text).
Artinya dua label paling atas dilepas, meskipun tampaknya ada cukup ruang. Jadi, saya pikir, mungkin margin plot baru diterapkan setelah label diplot, atau mungkin kliping menyebabkan masalah. Jadi, saya melakukan ini:
plot5 <- plot_grid(plot1, plot2, plot3, plot4, nrow = 2, ncol = 2,
align = "hv") +
theme(plot.margin = unit(c(3, 0, 0, 0), "cm")) +
coord_cartesian(clip = "off")
plot5 +
draw_plot_label(c("A", "B", "C", "D"), c(0, 0.5, 0, 0.5), c(1.1, 1.1, .5, .5))
Yang mengembalikan kesalahan yang sama seperti sebelumnya, meskipun, seperti yang Anda lihat, ada lebih banyak ruang yang tersedia di bagian atas plot. Sebagai upaya terakhir, saya juga mematikan kliping di plot aslinya, tetapi itu juga tidak memperbaiki apa pun, misalnya:
plot1 <- ggplot(df, aes(x = x, y = y)) +
geom_point() +
theme(plot.margin = unit(c(-1, 0, 0, 0), "cm")) +
coord_cartesian(clip = "off")
Masalahnya hanya terjadi ketika saya merencanakan melewati y = 1
. y = 1.01
menyebabkan masalah, misalnya. Bagaimana cara memperbaiki masalah ini? Sepertinya masalah yang cukup sederhana, kecuali ada masalah dengan ggplot
atau cowplot
.
plot_grid
, menggunakan perpustakaanegg
alih-alihcowplot
menyelesaikan masalah tanpa harus menyesuaikan margin, dll. - person erc   schedule 24.01.2019cowplot::plot_grid
, ia memanggilcowplot::ggdraw
dengan batas defaultnyac(0, 1)
untuk x dan y untuk membuat plotnya, dan selanjutnya menggunakanscale_x_continuous
danscale_y_continuous
dengan batas tersebut. Label diplot menggunakan batasan tersebut, jadi berdasarkan aturan ggplot standar, apa pun di luarnya akan dihapus. - person Nick Kennedy   schedule 12.02.2019y=1
. Jadi, ketika saya membuat plot pada labelnya, label tersebut berada di atas plot. Oleh karena itu saya harus membuat plot melewatiy=1
, yang tidak mungkin dilakukan, bahkan jika Anda menambahkan margin ekstra di seluruh grid. - person Grubbmeister   schedule 12.02.2019