【问题标题】:Add color to specific categorical variable [duplicate]为特定的分类变量添加颜色 [重复]
【发布时间】:2026-01-05 09:50:01
【问题描述】:

我想为特定的分类变量添加颜色。例如,我想特别突出(通过添加颜色)setosa 物种;对于其他物种(如弗吉尼亚和杂色),只有黑点。我想应该有一个简单的方法来做到这一点。我对 R 很陌生。

data(iris)
library(ggplot2)
#This is not desirable
ggplot(iris, aes(Sepal.Length, Petal.Width)) + geom_point() + geom_point(aes(colour=Species))
#This is what I aim to achieve, but it is not working
ggplot(iris, aes(Sepal.Length, Petal.Width)) + geom_point() + geom_point(aes(colour=Species$setosa))

【问题讨论】:

标签: r ggplot2 colors


【解决方案1】:

您可以尝试使用 Setosa vs. Other 的二进制字段创建一个新变量,并将其用作颜色美学:

library(tidyverse)
data(iris)

iris %>% 
  mutate(Species2 = if_else(Species == "setosa", "Setosa", "Versicolor/Virginica")) %>% 
  ggplot(aes(x = Sepal.Length, y = Petal.Width, color = Species2)) + 
  geom_point()

【讨论】:

  • 非常感谢您的帮助。这也很有启发性!
【解决方案2】:

您可以使用 scale_color_manual 手动为每个级别指定颜色

library(ggplot2)

ggplot(iris, aes(Sepal.Length, Petal.Width, color = Species)) + 
   geom_point() + 
   scale_color_manual(values = c('setosa' = 'Blue', 'versicolor' = 'black', 
                                  'virginica' = 'black'))


如果有很多这样的级别并且无法手动为所有级别分配颜色,我们可以按照this 答案中的建议创建一个命名向量。

color_vec <- rep("black", length(unique(iris$Species)))
names(color_vec) <- unique(iris$Species)
color_vec[names(color_vec) == "setosa"] <- "blue"

并在scale_color_manual中使用它

ggplot(iris, aes(Sepal.Length, Petal.Width, color = Species)) + 
   geom_point() + 
   scale_color_manual(values = color_vec)

【讨论】:

  • 非常感谢您的及时答复!
最近更新 更多