将基本 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 中的描述设置了绘图 p1
和 p3
。然后,通过一些拼凑的魔法,我们将这些情节组合起来。 /
运算符表示 p1 应高于 p3。
library(patchwork)
p1 / p3
我创建了许多 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 中的描述设置了绘图 p1
和 p3
。然后,通过一些拼凑的魔法,我们将这些情节组合起来。 /
运算符表示 p1 应高于 p3。
library(patchwork)
p1 / p3