将多个图合并为一个时的边距文本

margin text when combining multiple plots into one

我有一系列情节想合二为一,无法使用facet_wrap。所以我的每个地块都是一个单独的 object。我想要它们的大小都一样,我可以这样组合它们。

p = ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() + xlab("") + ylab("")

g=ggpubr::ggarrange(p, p, p,
                    p, p, p,
                    p, p, p, 
                    ncol = 3, nrow = 3)

我想添加一些适用于列和行的文本标签,如此处所示。

我已经尝试为各个图添加标题(例如,顶行的标题),但是与其他图相比,这会减小(灰色)图的大小,因此图尺寸不再是全部相同的大小。

任何线索将不胜感激。

您可以添加辅助坐标轴,清除主要坐标轴的标题并删除辅助坐标轴的刻度线但保留标题(查看我添加到您的 ggplot 中的 theme 函数 object).然后可以使用这些辅助轴的图块来编写您想要的文本。看下面的例子。

library(ggplot2)
library(ggpubr)


p <- ggplot(mtcars, aes(x=wt, y=mpg)) + 
      geom_point() + 
      xlab("") + ylab("") + 
          scale_y_continuous(position = 'right', sec.axis = dup_axis()) + 
          scale_x_continuous(position = "top", sec.axis = dup_axis()) +
          theme(plot.title = element_text(hjust=0.5), 
                axis.text.x.top = element_blank(),
                axis.ticks.x.top = element_blank(),
                axis.text.y.right = element_blank(),
                axis.ticks.y.right = element_blank(),
                axis.title.x.bottom = element_blank(), 
                axis.title.y.left = element_blank())


ggarrange(p + xlab("some text 1"), 
          p + xlab("some text 2"), 
          p + xlab("some text 3") + ylab("some text 33"),
          p, p, p + ylab("some text44"),
          p, p, p + ylab("some text55"), 
          ncol = 3, nrow = 3)

您可以将 axis.title.y.right = element_text(angle = 0) 添加到 theme 中,使 y-axis 标题为水平标题。

参照How to keep axis labels in one side and axis title in another using ggplot2