如何用ggplot指定不同的颜色

时间:2017-02-08 13:14:06

标签: r ggplot2

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

假设您拥有上述scatterplot。如何指定>= 25 mpg的点数redbetween 20 and 25 green0-20 blue

这可以用ggplot专门完成吗?

2 个答案:

答案 0 :(得分:6)

您可以分两步完成此操作:

首先,定义应具有不同颜色的组;通过向数据框添加另一列或在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]'))

指定要使用的颜色(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'))

答案 1 :(得分:2)

当然可以,尽管这种类型的工作可能最适合在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()创建标题,您可以将其传递给name = ..

中的scale_color_manual()参数