这不是最优雅的代码,但它可以工作。据我所知,有一个包可以为每个图指定大小和位置,但我还没有找到它。我只使用了 cowplot
和函数 plot_grid
。
生成图表
x <- rnorm(100)
y <- x * 2 + rnorm(100)
plt.df <- data.frame(x, y)
p <- ggplot(plt.df, aes(x = x, y = y)) + geom_point()
cowplot::plot_grid(
cowplot::plot_grid(p, p, p, p, p, p, ncol = 3, nrow = 2),
cowplot::plot_grid(NULL, p, p, NULL, rel_widths = c(0.5, 1, 1, 0.5), nrow = 1),
nrow = 2,
rel_heights = c(2, 1)
)
我首先像往常一样定义了一个包含6个图的网格。然后我定义了一个包含4个图的网格,其中两个为空,并使用rel_widths
参数确定它们的大小。
为了将它们组合起来,我再次调用plot_grid
,它接受前面两个网格。现在定义rel_heights
参数以确保它们的尺寸相似(由于有两个网格,一个比另一个多两倍的图,所以比率应该是2)。
通过为layout
指定适当的矩阵,也可以在基本R中完成此操作。
layout.m <- matrix(c(rep(1:6, each=2),
0, rep(7:8, each=2), 0),
nrow=3, byrow=T)
这个矩阵指定了一个3×6网格布局中八个图形的位置,其中有两个单元格为空。
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] 1 1 2 2 3 3
# [2,] 4 4 5 5 6 6
# [3,] 0 7 7 8 8 0
现在只需设置布局并进行绘图。
layout(layout.m)
par(mar=c(4, 4.5, 1, .5))
x <- 1:100
for (i in 1:8) {
y <- rnorm(100)
plot(x, y)
}
cowplot::plot_grid
是ggplot的附加包,而我的GAM图是用plot
完成的,所以我忽略了它。但在您的提示下,我发现可以安排不是由ggplot生成的图形。希望我能做到;) - Juan Carlos