如何使用 `cowplot` 包中的 `plot_grid` 对齐一组图的最后一列图中包含的图例?
How to align legends included in the plots of the last column of an arrange of plots using `plot_grid` from `cowplot` package?
我使用 cowplot
包中的 plot_grid
安排了 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
我分享了这个我遵循相同程序的假例子:
library(ggplot2)
library(cowplot)
library(ggpubr)
theme_set(theme_cowplot())
df1 <- data.frame(x = 1:12, y = (1:12)^2)
df1$grp = c('A', 'B', 'C')
df2 <- data.frame(x = 1:12, y = (1:12)^2)
df2$Statistic = c('none', 'Mean')
df3 <- data.frame(x = 1:12, y = (1:12)^2)
df3$Methodology = c('FFFFFF', 'GGGGGGGGG', 'HH','IIIII')
df4 <- data.frame(x = 1:12, y = (1:12)^2)
df4$Depth = c('15m', '1000m')
p1.a <- ggplot(df1, aes(x, y, color=grp)) + geom_point() + theme(legend.position = "none")
p1.b <- ggplot(df1, aes(x, y, color=grp)) + geom_point()
p2.a <- ggplot(df2, aes(x, y, color=Statistic)) + geom_point() + theme(legend.position = "none")
p2.b <- ggplot(df2, aes(x, y, color=Statistic)) + geom_point()
p3.a <- ggplot(df3, aes(x, y, color=Methodology)) + geom_point() + theme(legend.position = "none")
p3.b <- ggplot(df3, aes(x, y, color=Methodology)) + geom_point()
p4.a <- ggplot(df4, aes(x, y, color=Depth)) + geom_point() + theme(legend.position = "none")
p4.b <- ggplot(df4, aes(x, y, color=Depth)) + geom_point()
plot_grid(
p1.a, p1.a, p1.a, p1.b + theme(legend.justification = c(0,1)),
p2.a, p2.a, p2.a, p2.b + theme(legend.justification = c(0,1)),
p3.a, p3.a, p3.a, p3.b + theme(legend.justification = c(0,1)),
p4.a, p4.a, p4.a, p4.b + theme(legend.justification = c(0,1)),
ncol = 4,align = "hv"
)
我收到消息 "Warning message: Graphs cannot be vertically aligned unless the axis parameter is set. Placing graphs unaligned."
如何对齐图例?
您可以使用 patchwork
包。我发现它比 cowplot
.
快很多
library(ggplot2)
library(cowplot)
#>
#> ********************************************************
#> Note: As of version 1.0.0, cowplot does not change the
#> default ggplot2 theme anymore. To recover the previous
#> behavior, execute:
#> theme_set(theme_cowplot())
#> ********************************************************
theme_set(theme_cowplot())
df1 <- data.frame(x = 1:12, y = (1:12)^2)
df1$grp = c('A', 'B', 'C')
df2 <- data.frame(x = 1:12, y = (1:12)^2)
df2$Statistic = c('none', 'Mean')
df3 <- data.frame(x = 1:12, y = (1:12)^2)
df3$Methodology = c('FFFFFF', 'GGGGGGGGG', 'HH','IIIII')
df4 <- data.frame(x = 1:12, y = (1:12)^2)
df4$Depth = c('15m', '1000m')
p1.a <- ggplot(df1, aes(x, y, color=grp)) + geom_point() + theme(legend.position = "none")
p1.b <- ggplot(df1, aes(x, y, color=grp)) + geom_point() + theme(legend.justification = c(0,1))
p2.a <- ggplot(df2, aes(x, y, color=Statistic)) + geom_point() + theme(legend.position = "none")
p2.b <- ggplot(df2, aes(x, y, color=Statistic)) + geom_point() + theme(legend.justification = c(0,1))
p3.a <- ggplot(df3, aes(x, y, color=Methodology)) + geom_point() + theme(legend.position = "none")
p3.b <- ggplot(df3, aes(x, y, color=Methodology)) + geom_point() + theme(legend.justification = c(0,1))
p4.a <- ggplot(df4, aes(x, y, color=Depth)) + geom_point() + theme(legend.position = "none")
p4.b <- ggplot(df4, aes(x, y, color=Depth)) + geom_point() + theme(legend.justification = c(0,1))
library(patchwork)
#>
#> Attaching package: 'patchwork'
#> The following object is masked from 'package:cowplot':
#>
#> align_plots
# define plot layout 4 x 4
layout <- "
ABCD
EFGH
IJKL
MNOP
"
p1.a + p1.a + p1.a + p1.b +
p2.a + p2.a + p2.a + p2.b +
p3.a + p3.a + p3.a + p3.b +
p4.a + p4.a + p4.a + p4.b +
plot_layout(design = layout)
由 reprex package (v0.3.0)
于 2020-05-25 创建
可能有多种方法来处理这个问题,但一种选择是将图例放在它们自己的网格列中:
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"
)
我使用 cowplot
包中的 plot_grid
安排了 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
我分享了这个我遵循相同程序的假例子:
library(ggplot2)
library(cowplot)
library(ggpubr)
theme_set(theme_cowplot())
df1 <- data.frame(x = 1:12, y = (1:12)^2)
df1$grp = c('A', 'B', 'C')
df2 <- data.frame(x = 1:12, y = (1:12)^2)
df2$Statistic = c('none', 'Mean')
df3 <- data.frame(x = 1:12, y = (1:12)^2)
df3$Methodology = c('FFFFFF', 'GGGGGGGGG', 'HH','IIIII')
df4 <- data.frame(x = 1:12, y = (1:12)^2)
df4$Depth = c('15m', '1000m')
p1.a <- ggplot(df1, aes(x, y, color=grp)) + geom_point() + theme(legend.position = "none")
p1.b <- ggplot(df1, aes(x, y, color=grp)) + geom_point()
p2.a <- ggplot(df2, aes(x, y, color=Statistic)) + geom_point() + theme(legend.position = "none")
p2.b <- ggplot(df2, aes(x, y, color=Statistic)) + geom_point()
p3.a <- ggplot(df3, aes(x, y, color=Methodology)) + geom_point() + theme(legend.position = "none")
p3.b <- ggplot(df3, aes(x, y, color=Methodology)) + geom_point()
p4.a <- ggplot(df4, aes(x, y, color=Depth)) + geom_point() + theme(legend.position = "none")
p4.b <- ggplot(df4, aes(x, y, color=Depth)) + geom_point()
plot_grid(
p1.a, p1.a, p1.a, p1.b + theme(legend.justification = c(0,1)),
p2.a, p2.a, p2.a, p2.b + theme(legend.justification = c(0,1)),
p3.a, p3.a, p3.a, p3.b + theme(legend.justification = c(0,1)),
p4.a, p4.a, p4.a, p4.b + theme(legend.justification = c(0,1)),
ncol = 4,align = "hv"
)
如何对齐图例?
您可以使用 patchwork
包。我发现它比 cowplot
.
library(ggplot2)
library(cowplot)
#>
#> ********************************************************
#> Note: As of version 1.0.0, cowplot does not change the
#> default ggplot2 theme anymore. To recover the previous
#> behavior, execute:
#> theme_set(theme_cowplot())
#> ********************************************************
theme_set(theme_cowplot())
df1 <- data.frame(x = 1:12, y = (1:12)^2)
df1$grp = c('A', 'B', 'C')
df2 <- data.frame(x = 1:12, y = (1:12)^2)
df2$Statistic = c('none', 'Mean')
df3 <- data.frame(x = 1:12, y = (1:12)^2)
df3$Methodology = c('FFFFFF', 'GGGGGGGGG', 'HH','IIIII')
df4 <- data.frame(x = 1:12, y = (1:12)^2)
df4$Depth = c('15m', '1000m')
p1.a <- ggplot(df1, aes(x, y, color=grp)) + geom_point() + theme(legend.position = "none")
p1.b <- ggplot(df1, aes(x, y, color=grp)) + geom_point() + theme(legend.justification = c(0,1))
p2.a <- ggplot(df2, aes(x, y, color=Statistic)) + geom_point() + theme(legend.position = "none")
p2.b <- ggplot(df2, aes(x, y, color=Statistic)) + geom_point() + theme(legend.justification = c(0,1))
p3.a <- ggplot(df3, aes(x, y, color=Methodology)) + geom_point() + theme(legend.position = "none")
p3.b <- ggplot(df3, aes(x, y, color=Methodology)) + geom_point() + theme(legend.justification = c(0,1))
p4.a <- ggplot(df4, aes(x, y, color=Depth)) + geom_point() + theme(legend.position = "none")
p4.b <- ggplot(df4, aes(x, y, color=Depth)) + geom_point() + theme(legend.justification = c(0,1))
library(patchwork)
#>
#> Attaching package: 'patchwork'
#> The following object is masked from 'package:cowplot':
#>
#> align_plots
# define plot layout 4 x 4
layout <- "
ABCD
EFGH
IJKL
MNOP
"
p1.a + p1.a + p1.a + p1.b +
p2.a + p2.a + p2.a + p2.b +
p3.a + p3.a + p3.a + p3.b +
p4.a + p4.a + p4.a + p4.b +
plot_layout(design = layout)
由 reprex package (v0.3.0)
于 2020-05-25 创建可能有多种方法来处理这个问题,但一种选择是将图例放在它们自己的网格列中:
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"
)