3

我正在使用拼凑在 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")

在此处输入图像描述

4

2 回答 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")

于 2021-08-15T08:30:09.247 回答
0

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

library(gridExtra)

grid.arrange(p, p, p, p, p, leg,
             p, p, p, p, p, p,
             nrow = 2)
于 2021-08-15T16:26:45.383 回答