如何使用 ggpubr 包中的“ggarrange”排列多个绘图后添加图例?

Dek*_*ike 4 r ggplot2

我必须使用以下方法创建不同图的排列ggarrange

arrange <- ggarrange(P1,P2,P3,P4,P5, ncol=3,nrow = 2,common.legend = F, align = c("hv"))
arrange
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想添加一个常见的图例,所以我这样做了:

arrange <- ggarrange(P1,P2,P3,P4,P5, ncol=3,nrow = 2,common.legend = T, align = c("hv"),legend="top")
arrange
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,我希望图例位于图表的右下部分,在“空白”空间中。

你知道我该怎么做吗?

dc3*_*c37 8

也许它存在更简单、更容易的解决方案,但一个快速的方法是创建一个空图,仅显示图例并用于填充 中的最后一个位置ggarrange

这里使用数据集,您可以首先通过iris指定删除图例来生成五个图:legend.position = "none"theme

library(ggplot2)

p2 <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species))+
  geom_point()+
  theme(legend.position = "none")
Run Code Online (Sandbox Code Playgroud)

然后,绘制一个空图,仅将图例显示在绘图区域的中间。您可以增加 ggplot 的所有元素的大小,以便使其在最终的图形面板上可见:

p3 <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species))+
  geom_point()+
  lims(x = c(0,0), y = c(0,0))+
  theme_void()+
  theme(legend.position = c(0.5,0.5),
        legend.key.size = unit(1, "cm"),
        legend.text = element_text(size =  12),
        legend.title = element_text(size = 15, face = "bold"))+
  guides(colour = guide_legend(override.aes = list(size=8)))
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用ggarrange并指定 p3 作为最后一个图:

library(ggpubr)
ggarrange(p2,p2,p2,p2,p2, p3)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

它回答了你的问题吗?