如何使用分组 ggplot 中包含颜色名称的变量分配颜色?

How to assign colors using a variable containing color names in a grouped ggplot?

提问人:John J. 提问时间:10/23/2018 更新时间:10/23/2018 访问量:1960

问:

在这个简单示例中,我创建了一个包含颜色名称的变量。

df <- mtcars %>%
  mutate(color = "green",
     color = replace(color, cyl==6, "blue"),
     color = replace(color, cyl==8, "red"))

运行以下代码按预期工作。

ggplot(df, aes(wt, mpg)) +
  geom_point(color = df$color)

enter image description here

如果我想使用 geom_line 创建三条线(绿色、蓝色和红色)怎么办?

ggplot(df, aes(wt, mpg, group=cyl)) +
  geom_line(color = df$color)

取而代之的是,我得到了三条线,颜色在整个过程中循环。enter image description here

如何使用带有颜色名称的变量来分配不同线条的颜色?

r ggplot2

评论

0赞 tjebo 7/1/2020
这回答了你的问题吗?如何有条件地突出显示 ggplot2 分面图中的点 - 将颜色映射到列

答:

0赞 Richard J. Acton 10/23/2018 #1

您可以使用自定义色阶:

ggplot(df, aes(wt, mpg, group=cyl)) +
    geom_line(aes(color = color)) +
    scale_color_manual(values = c("blue"="blue","red"="red","green"="green"))
-1赞 bob1 10/23/2018 #2

简短的回答:你不能。您已设置变量以设置您创建的变量中的颜色。

但是,默认情况下有一种方法可以执行此操作:ggplot

mtcars$cyl <-as.factor(mtcars$cyl) ## set mtcars$cyl as factors (i.e use exact values in column)

ggplot(mtcars, aes(x=wt, y= mpg, color = cyl)) +
       geom_point()+
       scale_color_manual(breaks = c("8", "6", "4"),
                    values=c("red", "blue", "green"))+ ## adjust these if you want different colors
       geom_line()

省略了线位...

5赞 markus 10/23/2018 #3

我想你正在寻找scale_color_identity

ggplot(df, aes(wt, mpg)) +
  geom_point(aes(color = color)) +
  scale_color_identity(guide = "legend") # default is guide = "none"

enter image description here

这是相应的折线图

ggplot(df, aes(wt, mpg)) +
  geom_line(aes(color = color)) +
  scale_color_identity(guide = "legend")

enter image description here

评论

1赞 John J. 10/23/2018
很好。scale_identity() 是我缺失的一步。非常感谢。