使用 grid.arrange 扩大 multi-panel 图中的边距以适应 cross-panel 标题

Widening margins in multi-panel figure to fit cross-panel titles using grid.arrange

我需要在 grid.arrange object 中扩大边距。下面举例说明问题

library(tidyverse)
library(grid)
library(gridExtra)

这是一些数字

g1 <- ggplot(iris, aes(Sepal.Width, Petal.Length)) + geom_point()
g2 <- ggplot(iris, aes(Sepal.Width, Petal.Length)) + geom_point()
g3 <- ggplot(iris, aes(Sepal.Width, Petal.Length)) + geom_point()
g4 <- ggplot(iris, aes(Sepal.Width, Petal.Length)) + geom_point()

现在假设我想使用 gridExtragrid 包中令人惊叹的 grid.arrange() 函数将所有这些放入一个 multi-panel 图形中。假设我还想添加一些 cross-panel 标题,标题跨越我的几个数字。

gridExtra::grid.arrange(g1, g2, g3, g4, ncol = 2, nrow = 2,
                        left = textGrob("Cross-panel title 1",
                                        gp = gpar(fontsize = 16),
                                        rot = 90),
                        right = textGrob("Cross-panel title 1",
                                        gp = gpar(fontsize = 16),
                                        rot = 270,
                                        vjust = 0)) -> panelG

请注意,我想将 right-hand 侧 y-axis 标题从面板的右侧 yaxes 移得更远。所以要做到这一点是在 textGrob() 函数中使用 vjust = 参数。现在当我保存这个数字时。

ggsave("panelG.jpg",
       plot = panelG,
       device = "jpg",
       width = 10,
       height = 10,
       units = c("cm"),
       limitsize = T)

它切断了一些文本。

如何在不切断文本的情况下将右边的 y-axis cross-panel 标题移离轴更远?

您可以在右侧添加更多填充(从默认的 .5 增加到 1):

gridExtra::grid.arrange(g1, g2, g3, g4, ncol = 2, nrow = 2, padding=unit(c(.5,1),"line"),
                        left = textGrob("Cross-panel title 1",
                                        gp = gpar(fontsize = 16),
                                        rot = 90),
                        right = textGrob("Cross-panel title 2",
                                        gp = gpar(fontsize = 16),
                                        rot = 270,
                                        vjust = 0)) -> panelG