微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将ggplot2中的图例与拼凑离散/分类数据合并和合并

如何解决将ggplot2中的图例与拼凑离散/分类数据合并和合并

我使用软件包 patchwork 功能将3个 ggplot2 地块布置成一个图形。我试图收集这些传说,它们彼此相邻出现。但是,它们是3个独立的图例,我希望有一个图例。那么如何将包含相同因子变量的相同值的图例合并到单个图例中?

注意:

  1. 而且我不想通过使用theme(legend.position = "none")删除单独图表的图例,以防出现某些附加因子水平。我希望有拼凑而成的特定解决方案。
  2. Combine and merge legends in ggplot2 with patchwork中回答了类似的问题,但是数据是连续的。就我而言,我拥有分类数据。

代码

library(ggplot2)
library(patchwork)

iris_1 <-
  ggplot(iris,aes(x = Sepal.Length,fill = Species,color = Species)) +
  geom_density(alpha = 0.3,adjust = 1.5)

iris_2 <-
  ggplot(iris,y = Sepal.Width,color = Species)) +
  geom_point()

iris_3 <-
  ggplot(iris,aes(x = Species,fill = Species)) +
  geom_Boxplot()


(iris_1 + iris_2 + iris_3) + plot_layout(guides = "collect")

reprex package(v0.3.0)于2020-10-14创建


更新

我尝试使用与下面的注释中建议的相同的美学映射(fill = Speciescolor = Species),但无效:

library(tidyverse)
library(patchwork)

iris_1 <-
  ggplot(iris,color = Species,fill = Species)) +
  geom_density(alpha = 0.3,fill = Species)) +
  geom_point()

iris_3 <-
  ggplot(iris,fill = Species)) +
  geom_Boxplot(color = "black")

(iris_1 + iris_2 + iris_3) + plot_layout(guides = "collect")

reprex package(v0.3.0)于2020-10-14创建

解决方法

不幸的是,设置相同的aes只是一种条件。拼凑而成的图例只有在它们相同的情况下才会合并。因此,我们必须确保每个图例的图例都相同。为此,我添加了一个guides层,通过设置colorshapesizealpha使每个图例的外观相同。另外,我们必须使用参数key_glyph为每个geom选择相同的字形。经过这些调整,三个图例合并为一个。

library(ggplot2)
library(patchwork)

g <- guides(fill = guide_legend(override.aes = list(color = scales::hue_pal()(3),shape = c(16,16,16),size = c(1,1,1),alpha = c(1,1)),))

iris_1 <-
  ggplot(iris,aes(x = Sepal.Length)) +
  geom_density(aes(fill = Species,color = Species),key_glyph = "point",alpha = 0.3,adjust = 1.5) +
  g

iris_2 <-
  ggplot(iris,aes(x = Sepal.Length,y = Sepal.Width)) +
  geom_point(aes(fill = Species,key_glyph = "point") +
  g

iris_3 <-
  ggplot(iris,aes(x = Species,y = Sepal.Width)) +
  geom_boxplot(aes(fill = Species,key_glyph = "point") +
  scale_color_manual(values = c("black","black","black")) +
  g


(iris_1 + iris_2 + iris_3) + plot_layout(guides = "collect")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。