在不同轴的情况下调整面板图 (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 github,plot_grid()
默认情况下不添加任何 space 并使用绘图的边距。要删除绘图区域外的 space,可以使用 them(plot.margin=...)
删除。
话虽这么说...这不是这里发生的事情!打印 plot
或 plot2
将产生没有边距的绘图。看来问题出在 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 创建
当一些绘图包含轴 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 github,plot_grid()
默认情况下不添加任何 space 并使用绘图的边距。要删除绘图区域外的 space,可以使用 them(plot.margin=...)
删除。
话虽这么说...这不是这里发生的事情!打印 plot
或 plot2
将产生没有边距的绘图。看来问题出在 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 创建