将 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 制作的图例与命名向量相结合的主要内容,如果未能解决你的问题,请参考以下文章