使用patchwork和单个图例对齐多个ggplot图形。

3
我使用patchwork在R中创建一个多图,它们共享一个图例。因此,我使用ggpubr :: get_legend()将图例包含在右上角面板中(注意:我不能使用 patchwork :: plot_layout(),因为图例具有不同的基础值)。 基础绘图
library(ggplot2)
library(patchwork)
library(ggpubr)

p <- ggplot(data = mtcars %>% mutate(cyl = as.factor(cyl)),
                mapping = aes(x = wt, y = mpg, group = cyl, color = cyl)) +
   geom_smooth(method = "lm")

当顶部和底部行拥有6个相同的地块时,这些地块将对齐:

(p | p | p | p | p | p) /
   (p | p | p | p | p | p) &
   theme(legend.position = "none")

当顶部第5个图例时,它们不对齐:

图片描述

leg <- as_ggplot(get_legend(p))

(p | p | p | p | p | leg) /
   (p | p | p | p | p | p) &
   theme(legend.position = "none")

enter image description here

2个回答

2

实现您想要的结果的一种方法是将所有图例包括在一个列表中,并利用patchwork::wrap_plots

library(ggplot2)
library(patchwork)
library(ggpubr)

p <- ggplot(data = mtcars %>% mutate(cyl = as.factor(cyl)),
            mapping = aes(x = wt, y = mpg, group = cyl, color = cyl)) +
  geom_smooth(method = "lm")

leg <- as_ggplot(get_legend(p))

p_list <- lapply(1:12, function(x) if (x == 6) leg else p)
wrap_plots(p_list, nrow = 2) &
  theme(legend.position = "none")


0

这也可以使用gridExtra包中的grid.arrange()完成:

library(gridExtra)

grid.arrange(p, p, p, p, p, leg,
             p, p, p, p, p, p,
             nrow = 2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接