将基本 ggplots 与 ggarrange (R) 中的多面 ggplots 对齐

Aligning basic ggplots with faceted ggplots in ggarrange (R)

我创建了许多 ggplots 图表,我想用 ggpubr 包的 ggarrange 函数来组织这些图表。 当我尝试将基本 ggplots 与多面 ggplots 组合时,我 运行 遇到了一个问题:我无法再对齐它们。

这是我的问题的可重现示例:

#Creating some data
df2 <- data.frame(supp=rep(c("VC", "OJ"), each=3),
       dose=rep(c("0.5", "1", "2"),2),
       len=c(6.8, 15, 33, 4.2, 10, 29.5))
head(df2)


#normal ggplot #1
p1<-ggplot(data=df2, aes(x=dose, y=len, group=supp)) +
  geom_line()+
  geom_point()

#normal ggplot #2 with a different y axis
p2<- ggplot(data=df2, aes(x=dose, y=10*len, group=supp)) +
  geom_line()+
  geom_point()

#faceted plot
p3<-p2+
  facet_wrap(. ~ supp)

当我组合两个基本的 ggplots 并强制与 y 轴垂直对齐时,它就像一个魅力!

ggarrange(p1,p2,
          nrow=2,
          align="v")

但是当我将基本图与多面图组合时,对齐不起作用。

ggarrange(p1,p3,
          nrow=2,
          align="v")

我收到以下警告:

Warning message: Graphs cannot be vertically aligned unless the axis parameter is set. Placing graphs unaligned.

你能帮我解决这个问题吗?我已经看到了用 cowplot 解决这个问题的其他潜在想法,但我真的很想坚持使用 ggpubr!

非常感谢

您可以填充 y 轴以在 ggarrange 中调整它。您可以围绕 y 轴填充边距,这将使两个数字对齐(虽然有点老套)。

df2 <- data.frame(supp=rep(c("VC", "OJ"), each=3),
                  dose=rep(c("0.5", "1", "2"),2),
                  len=c(6.8, 15, 33, 4.2, 10, 29.5))


#normal ggplot #1
p1<-ggplot(data=df2, aes(x=dose, y=len, group=supp)) +
  geom_line()+
  geom_point() +
  theme(axis.title.y = element_text(margin = margin(t = 0, r = 0, b = 0, l = 5)))

#normal ggplot #2 with a different y axis
p2<- ggplot(data=df2, aes(x=dose, y=10*len, group=supp)) +
  geom_line()+
  geom_point()

p3<-p2+
  facet_wrap(. ~ supp)

ggarrange(p1,p3,
          nrow=2)

这是一个使用 patchwork 包的解决方案。假设我们已经按照原始 post 中的描述设置了绘图 p1p3。然后,通过一些拼凑的魔法,我们将这些情节组合起来。 / 运算符表示 p1 应高于 p3。

library(patchwork)
p1 / p3