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

时间:2020-07-24 16:30:41

标签: r ggplot2 spacing cowplot

当某些图包含轴标题/标签而另一些不包含轴标题/标签时,我想使用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") 

enter image description here

这些图完全对齐!但是通常,我有一个场景想要创建一个“更干净”的面板图。一种方法是删除第二个和第三个图的y轴的标题/文本。

赞:

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

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

enter image description here

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

预期输出

enter image description here

cowplot有可能吗?还是有其他方法可以做到这一点?

2 个答案:

答案 0 :(得分:1)

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

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

使用align =“ vh”的原始代码

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

enter image description here

使用align =“ none”

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

enter image description here

根据您的图形设备,将进一步增加空间,因为您获得的实际图取决于该设备的大小和分辨率。

答案 1 :(得分:1)

这是使用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创建