将 scale_shape_manual 制作的图例与命名向量相结合

Posted

技术标签:

【中文标题】将 scale_shape_manual 制作的图例与命名向量相结合【英文标题】:Combining legends made by scale_shape_manual with a named vector 【发布时间】: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)) 【参考方案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))

【讨论】:

以上是关于将 scale_shape_manual 制作的图例与命名向量相结合的主要内容,如果未能解决你的问题,请参考以下文章

goeserver发布自己制作的图层(详细)

MATLAB制作符合IEEE标准的图插入Latex

ps雨滴效果制作

如何保存在闪亮的应用程序中制作的图

r 访问ggplot2图的范围:动态制作一堆需要具有相同范围的图,但你事先并不知道wh

如何在另一个python图中添加不同的图(作为插图)[重复]