如何在R中将图形居中对齐?

3
我有以下图表:

enter image description here

我希望第三行的两个图表居中显示。我尝试使用cowplotggplot2grid_arrange等软件包,但没有成功,因为它们会改变其宽度以适应其他两行的宽度(就像在此示例中一样)。

enter image description here

是否有可能将最后两个图表居中,而不改变它们的宽度?

谢谢

2个回答

1

这不是最优雅的代码,但它可以工作。据我所知,有一个包可以为每个图指定大小和位置,但我还没有找到它。我只使用了 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)
)

enter image description here

我首先像往常一样定义了一个包含6个图的网格。然后我定义了一个包含4个图的网格,其中两个为空,并使用rel_widths参数确定它们的大小。 为了将它们组合起来,我再次调用plot_grid,它接受前面两个网格。现在定义rel_heights参数以确保它们的尺寸相似(由于有两个网格,一个比另一个多两倍的图,所以比率应该是2)。


感谢您的有用解释。也许是因为cowplot::plot_grid是ggplot的附加包,而我的GAM图是用plot完成的,所以我忽略了它。但在您的提示下,我发现可以安排不是由ggplot生成的图形。希望我能做到;) - Juan Carlos

0

通过为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)
}

Final layout


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接