在不同轴的情况下调整面板图 (ggplot) 子图之间的间距。title/text 属性

Adjust spacing between subplots of panel figure (ggplot) in case of different axis.title/text properties

当一些绘图包含轴 titles/labels 而其他绘图不包含时,我想使用 cowplot 包调整面板中对齐的绘图之间的间距。

例子

让我们创建三个地块:

library(tidyverse)
library(cowplot)

set.seed(123)

df <- data.frame(x = rnorm(n = 100), 
                 y = rnorm(n = 100))

plot <- ggplot(data = df, aes(x, y)) + geom_point()

plot_grid(plot, plot, plot, nrow = 1, align = "vh") 

这些图完美对齐!但通常,我有一个场景,我想创建一个 'cleaner' 面板图。一种方法是删除第二个和第三个图的 y 轴的 titles/text。

像这样:

plot2 <- plot + theme(axis.title.y = element_blank(),  
                      axis.text.y = element_blank())

plot_grid(plot, plot2, plot2, nrow = 1, align = "vh")

再次,完美对齐,但第一张和第二张图(以及第二张和第三张图)之间的间距非常大。我想减少间距以创建更紧凑的图,同时轴保持完全相同的大小。

预期输出

cowplot 可以吗?或者还有其他方法吗?

引用 this post on githubplot_grid() 默认情况下不添加任何 space 并使用绘图的边距。要删除绘图区域外的 space,可以使用 them(plot.margin=...) 删除。

话虽这么说...这不是这里发生的事情!打印 plotplot2 将产生没有边距的绘图。看来问题出在 plot_grid() 中使用 align= 参数。我不确定为什么,但将其设置为默认值 (align="none") 以外的任何值会导致绘图周围出现额外的白色 space。很奇怪...不用说,删除该参数可以解决您的问题:

原始代码使用 align="vh"

plot_grid(plot, plot2, plot2, nrow = 1, align="vh")

使用对齐=“none”

plot_grid(plot, plot2, plot2, nrow = 1, align="none")

任何进一步的 space 将根据您的图形设备添加,因为您获得的实际绘图取决于该设备的大小和分辨率。

这是使用 patchwork

的解决方案
library(tidyverse)

set.seed(123)

df <- data.frame(x = rnorm(n = 100), 
                 y = rnorm(n = 100))

plot1 <- ggplot(data = df, aes(x, y)) + geom_point()

plot2 <- plot1 + theme(axis.title.y = element_blank(),  
                      axis.text.y = element_blank())

# install.packages("patchwork", dependencies = TRUE)
library(patchwork)

plot1 + plot2 + plot2 +
  plot_layout(ncol = 3) 

reprex package (v0.3.0)

于 2020-07-24 创建