如何使用“cowplot”软件包中的“plot_grid”对齐排列图最后一列的图中包含的图例?

如何使用“cowplot”软件包中的“plot_grid”对齐排列图最后一列的图中包含的图例?,r,ggplot2,cowplot,R,Ggplot2,Cowplot,我已使用cowplot软件包中的plot\u网格安排了16个绘图(4x4)。我想调整我的安排最后一列,使所有的图例垂直对称。我读过书,但没有得到我想要的。我不知道为什么它不起作用 arrange <- plot_grid(P.ADelay.5m,P.ADelay.15m,P.ADelay.25m,P.ADelay.35m + theme(legend.justification = c(0,1)), P.SW.5m,P.SW.15m,P.SW.25

我已使用
cowplot
软件包中的
plot\u网格
安排了16个绘图(4x4)。我想调整我的安排最后一列,使所有的图例垂直对称。我读过书,但没有得到我想要的。我不知道为什么它不起作用

arrange <- plot_grid(P.ADelay.5m,P.ADelay.15m,P.ADelay.25m,P.ADelay.35m + theme(legend.justification = c(0,1)),
                     P.SW.5m,P.SW.15m,P.SW.25m,P.SW.35m + theme(legend.justification = c(0,1)),
                     P.Method.5m,P.Method.15m,P.Method.25m,P.Method.35m + theme(legend.justification = c(0,1)),
                     P.Period.5m,P.Period.15m,P.Period.25m,P.Period.35m + theme(legend.justification = c(0,1)),
                     P.Statistic.5m,P.Statistic.15m,P.Statistic.25m,P.Statistic.35m + theme(legend.justification = c(0,1)),
                     ncol=4, nrow = 5, align = "v" )

arrange
arrange您可以使用该软件包。我发现它比cowplot快得多

库(ggplot2)
图书馆(cowplot)
#> 
#> ********************************************************
#>注意:从版本1.0.0开始,cowplot不会更改
#>不再使用默认的ggplot2主题。恢复以前的
#>行为,执行:
#>theme\u集合(theme\u cowplot())
#> ********************************************************
theme\u集合(theme\u cowplot())
df1您可以使用该软件包。我发现它比cowplot快得多

库(ggplot2)
图书馆(cowplot)
#> 
#> ********************************************************
#>注意:从版本1.0.0开始,cowplot不会更改
#>不再使用默认的ggplot2主题。恢复以前的
#>行为,执行:
#>theme\u集合(theme\u cowplot())
#> ********************************************************
theme\u集合(theme\u cowplot())

df1可能有多种方法来处理此问题,但有一种方法是将图例放置在其自己的网格列中:

p1.a <- ggplot(df1, aes(x, y, color=grp)) + geom_point() + theme(legend.justification = c(0,0.8))
p1.leg  <- as_ggplot(get_legend(p1.a))
p1.a <- p1.a + theme(legend.position = "none")

p2.a <- ggplot(df2, aes(x, y, color=Statistic)) + geom_point() + theme(legend.justification = c(0,0.8))
p2.leg  <- as_ggplot(get_legend(p2.a))
p2.a <- p2.a + theme(legend.position = "none")

p3.a <- ggplot(df3, aes(x, y, color=Methodology)) + geom_point() + theme(legend.justification = c(0,0.8))
p3.leg  <- as_ggplot(get_legend(p3.a))
p3.a <- p3.a + theme(legend.position = "none")

p4.a <- ggplot(df4, aes(x, y, color=Depth)) + geom_point() + theme(legend.justification = c(0,0.8))
p4.leg  <- as_ggplot(get_legend(p4.a))
p4.a <- p4.a + theme(legend.position = "none")

plot_grid(
  p1.a, p1.a, p1.a, p1.a, p1.leg,
  p2.a, p2.a, p2.a, p2.a, p2.leg,
  p3.a, p3.a, p3.a, p3.a, p3.leg,
  p4.a, p4.a, p4.a, p4.a, p4.leg,
  ncol = 5, align = "hv"
)

p1.a处理此问题的方法可能有多种,但有一种选择是将图例放置在网格的各自列中:

p1.a <- ggplot(df1, aes(x, y, color=grp)) + geom_point() + theme(legend.justification = c(0,0.8))
p1.leg  <- as_ggplot(get_legend(p1.a))
p1.a <- p1.a + theme(legend.position = "none")

p2.a <- ggplot(df2, aes(x, y, color=Statistic)) + geom_point() + theme(legend.justification = c(0,0.8))
p2.leg  <- as_ggplot(get_legend(p2.a))
p2.a <- p2.a + theme(legend.position = "none")

p3.a <- ggplot(df3, aes(x, y, color=Methodology)) + geom_point() + theme(legend.justification = c(0,0.8))
p3.leg  <- as_ggplot(get_legend(p3.a))
p3.a <- p3.a + theme(legend.position = "none")

p4.a <- ggplot(df4, aes(x, y, color=Depth)) + geom_point() + theme(legend.justification = c(0,0.8))
p4.leg  <- as_ggplot(get_legend(p4.a))
p4.a <- p4.a + theme(legend.position = "none")

plot_grid(
  p1.a, p1.a, p1.a, p1.a, p1.leg,
  p2.a, p2.a, p2.a, p2.a, p2.leg,
  p3.a, p3.a, p3.a, p3.a, p3.leg,
  p4.a, p4.a, p4.a, p4.a, p4.leg,
  ncol = 5, align = "hv"
)

p1.a您可能需要
axis='lr'
axis='tblr'
plot_grid()
call中使用
axis='lr'
axis='tblr'
来对齐图例。但是,柱之间的空间急剧增加!!!如果不是一回事,那就是另一回事了!!如果我删除了
align=“hv”
中的
v
,则图例将失去对齐。如果删除轴='lr'
或轴='tblr'
,我也会丢失对齐。但是,正如我已经告诉过您的,如果我保持
axis='lr'
/
axis='tblr'
align=“hv”
,我得到的对齐是很少的。你知道为什么吗?只是想知道而已。我现在要试试你的另一个建议。你可能需要
axis='lr'
axis='tblr'
在你的
plot\u grid()
call中使用
axis='lr'
axis='tblr'
来对齐图例。但是,柱之间的空间急剧增加!!!如果不是一回事,那就是另一回事了!!如果我删除了
align=“hv”
中的
v
,则图例将失去对齐。如果删除轴='lr'
或轴='tblr'
,我也会丢失对齐。但是,正如我已经告诉过您的,如果我保持
axis='lr'
/
axis='tblr'
align=“hv”
,我得到的对齐是很少的。你知道为什么吗?只是想知道而已。我现在要试试你的另一个建议。谢谢@Tung,你能告诉我拼凑的工作原理吗?我的意思是,我看到你写了‘布局’是的,它告诉我们在矩阵中每个单独的情节放在哪里。您可以用
AABB
AAAA
替换
ABCD
,以查看绘图的变化情况。这看起来比我使用的其他替代方案更好。然而,这种排列并不完美。我已经更新了帖子,并使用您的建议(
拼凑包
)添加了一张图片,其中包含我的实际绘图安排。你知道为什么对齐不完美吗?你必须摆弄你设置图例的方式。我不认为
patchwork
能做得更好Hanks@Tung,你能告诉我
patchwork
是如何工作的吗?我的意思是,我看到你写了‘布局’是的,它告诉我们在矩阵中每个单独的情节放在哪里。您可以用
AABB
AAAA
替换
ABCD
,以查看绘图的变化情况。这看起来比我使用的其他替代方案更好。然而,这种排列并不完美。我已经更新了帖子,并使用您的建议(
拼凑包
)添加了一张图片,其中包含我的实际绘图安排。你知道为什么对齐不完美吗?你必须摆弄你设置图例的方式。我认为,
patchwork
无法做得更好谢谢@dww的关注。我真的很感激。您知道有没有办法在X轴上只留下一个
X
标签,在Y轴上只留下一个
Y
标签,并且两个标签都居中,并且为每列添加一个名称?在本例中,与我的真实数据一样,x轴和y轴的所有绘图共享相同的单位。变化在于每一行使用不同的图例,每一列对应不同的变量。最后我自己找到了一个解决办法,但似乎很棘手。我请求你,以防有更简单的方法。谢谢@dww的关注。我真的很感激。您知道有没有办法在X轴上只留下一个
X
标签,在Y轴上只留下一个
Y
标签,并且两个标签都居中,并且为每列添加一个名称?在本例中,与我的真实数据一样,x轴和y轴的所有绘图共享相同的单位。变化在于每一行使用不同的图例,每一列对应不同的变量。最后我自己找到了一个解决办法,但似乎很棘手。我问你,以防有更简单的方法。