如何使用ggplot指定不同的颜色

7
library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point(size=4)

假设您有上面的散点图。如何指定那些点的油耗值>= 25 mpg将被绘制为红色,20到25之间的为绿色,0-20之间的为蓝色?这可以在ggplot中实现吗?
2个回答

8
你需要分两步完成:
首先,你需要定义应该具有不同颜色的组;可以通过向数据框添加另一列或在 aes 内部来实现。这里我将使用 aes
aes(wt, mpg, color = cut(mpg, breaks = c(0, 20, 25, Inf)))

其次,通过指定手动颜色或填充比例尺:
scale_color_manual(values = c('blue', 'green', 'red'),
                   limits = c('(0,20]', '(20,25]', '(25,Inf]'))

这段内容涉及到it技术,具体翻译如下:

这指定了要使用哪些颜色(values),以及为它们分配哪些标签(limits),这些标签是由cut生成的分组名称。

综上所述:

ggplot(mtcars) +
    aes(wt, mpg, color = cut(mpg, breaks = c(0, 20, 25, Inf))) +
    geom_point(size = 4) +
    scale_color_manual(values = c('blue', 'green', 'red'),
                       limits = c('(0,20]', '(20,25]', '(25,Inf]'))

您可以通过将分组作为单独的列添加到您的数据中,或通过提供guides函数调用来改进图例标题:

guides(color = guide_legend(title = 'mpg range'))

4
当然可以,不过最好在使用 ggplot() 之前与数据框一起处理。你可以像这样使用 ifelse():
library(ggplot2)

p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point(size = 4, 
               aes(color = ifelse(mpg > 25, "> 25", 
                                  ifelse(mpg > 20, "20-25", "< 20")))) +
  scale_color_manual(values = c("> 25" = "red", "< 20" = "blue", "20-25" = "green"),
                     name = "MPG"  )

不需要调用 guides() 来创建标题,您可以将它传递给 scale_color_manual() 中的 name = .. 参数。


4
注意:代码中的颜色名称与图中的颜色不一致。它们大致匹配纯粹是巧合(实际上它们并不匹配,存在不匹配的情况)。 - Konrad Rudolph
2
尝试添加 + scale_colour_manual(values = c("red" = "red","blue" = "blue","green" = "green")) 以避免 @KonradRudolph 提到的问题。此外,尝试将 color 变量创建为数据集列,以便拥有更好的图例/标题。 - AntoniosK
谢谢大家的反馈,我使用了你们的建议/批评来更新。 - Nate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接