Как указать разные цвета с помощью 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")
вам не нужно звонить guides()
чтобы создать заголовок, вы можете передать его в