当某些图包含轴标题/标签而另一些不包含轴标题/标签时,我想使用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")
这些图完全对齐!但是通常,我有一个场景想要创建一个“更干净”的面板图。一种方法是删除第二个和第三个图的y轴的标题/文本。
赞:
plot2 <- plot + theme(axis.title.y = element_blank(),
axis.text.y = element_blank())
plot_grid(plot, plot2, plot2, nrow = 1, align = "vh")
再次,完全对齐,但是第一和第二个图(以及第二和第三个图)之间的间距很大。我想减少间距以创建更紧凑的图,同时使轴保持完全相同的大小。
预期输出
cowplot
有可能吗?还是有其他方法可以做到这一点?
答案 0 :(得分:1)
参考this post on github,plot_grid()
默认情况下不添加任何空间,并使用绘图的边距。要删除绘图区域之外的空间,可以使用them(plot.margin=...)
删除。
话虽这么说...这不是这里发生的事情!打印plot
或plot2
将产生没有边距的打印。看来问题出在align=
中使用plot_grid()
参数。我不确定为什么,但是将其设置为默认值(align="none"
以外的任何值都会导致图周围多余的空格。很奇怪...不用说,删除该参数可以解决您的问题:
plot_grid(plot, plot2, plot2, nrow = 1, align="vh")
plot_grid(plot, plot2, plot2, nrow = 1, align="none")
根据您的图形设备,将进一步增加空间,因为您获得的实际图取决于该设备的大小和分辨率。
答案 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创建