【问题标题】:Combining legends made by scale_shape_manual with a named vector将 scale_shape_manual 制作的图例与命名向量相结合
【发布时间】:2021-10-28 05:15:58
【问题描述】:

我想在 ggplot 中使用颜色和形状美学来表示同一个变量。 我正在使用scale_shape_manual,因为我不喜欢默认形状。 为了确保为每个值分配所需的形状,我给values 一个命名向量。 情节很好,但我有两个传说,一个关于颜色,一个关于形状。 我猜这是因为 shape 有一个命名向量,而 color 有一个未命名向量。

我希望有一个单一的组合颜色/形状图例,就像我使用未命名的矢量一样。有什么建议吗?

我可以将scale_colour_manual 与命名向量一起使用,但想使用scale_colour_brewer 之类的东西。使用labs 为颜色和物种赋予相同的名称并没有帮助(它们已经具有相同的名称)。

library(ggplot2)
data(penguins, package = "palmerpenguins")

ggplot(penguins, 
       aes(x = body_mass_g, y = bill_length_mm, colour = species, shape = species)) +
  geom_point() +
  scale_shape_manual(values = c(Adelie = 17, Gentoo = 16, Chinstrap = 6))

reprex package (v2.0.1) 于 2021 年 8 月 28 日创建

【问题讨论】:

  • 您使用的是哪个 ggplot2 版本?因为我用你的代码得到了想要的结果
  • 我在 v3.3.5 上得到了相同的结果。这对我来说似乎是出乎意料的行为。
  • 我是3.3.3,更新到3.3.5后图例分开了
  • 我在 R 4.1.1 中使用 ggplot2 版本 3.3.5
  • 这似乎是因为您提供形状值的顺序与它为颜色图例呈现的顺序不同。试试scale_shape_manual(values = c(Adelie = 17, Chinstrap = 6, Gentoo = 16))

标签: r ggplot2 legend


【解决方案1】:

您可以添加 scale_color_manual(values = c(Adelie = "red", Gentoo = "green", Chinstrap = "blue")) 来覆盖现有颜色:

优点是:可以单独定义颜色:

library(ggplot2)
data(penguins, package = "palmerpenguins")

ggplot(penguins, 
       aes(x = body_mass_g, y = bill_length_mm, colour = species, shape = species)) +
    geom_point() +
    scale_shape_manual(values = c(Adelie = 17, Gentoo = 16, Chinstrap = 6)) +
    scale_color_manual(values = c(Adelie = "red", Gentoo = "green", Chinstrap = "blue"))

【讨论】:

    【解决方案2】:

    你有没有预料到这样的效果?

    library(ggplot2)
    data(penguins, package = "palmerpenguins")
    
    
    ggplot(penguins, 
           aes(x = body_mass_g, y = bill_length_mm, colour = species, shape = species)) +
      geom_point() +
      scale_shape_manual(values = c(17, 6, 16))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 2015-08-28
      相关资源
      最近更新 更多