Как указать разные цвета с помощью ggplot

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

Предположим, у вас есть выше scatterplot. Как вы можете указать, что точки, которые >= 25 mpg будет нанесен red, одно between 20 and 25 green и 0-20 blue?

можно ли это сделать с ggplot конкретно?

2 ответов


вы делаете это в два шага:

во-первых, вы определяете группы, которые должны иметь разные цвета; либо путем добавления другого столбца в фрейм данных, либо внутри 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'))

конечно, может, хотя этот тип работы, если, вероятно, лучше всего подходит для работы с фреймом данных до ggplot(). Вы могли бы использовать ifelse() такой:

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

enter image description here

вам не нужно звонить guides() чтобы создать заголовок, вы можете передать его в