Ggplot geom_point() с цветами на основе конкретных дискретных значений
Я пытаюсь построить точки данных с тремя разными цветами для трех диапазонов значений. Например:
library(ggplot2)
ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(colour = qsec))
Вышеизложенное дает:
![enter image description here]()
Теперь я хотел бы изменить это так, чтобы значения qseq < 17 были черными, значения между 17 и 19 были желтыми, а значения выше 19 красными. Я пробовал разные подходы, но никто из них не работает:
-
Взято из здесь
ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(fill = qsec)) +
scale_fill_gradientn(colours=c("black","yellow","red"),
breaks=c(0,17,19), labels=format(c("0","17","19")))
Это дает:
![enter image description here]()
Итак, цветная панель кажется правильной, но цвета на самом деле не применяются.
-
Решения, представленные в ggplot2 heatmap с цветами для значений дальности, кажутся многообещающими, но я не могу заставить их работать с geom_point()
.
-
То же самое касается различных похожих сообщений, таких как те, которые указаны на боковой панели.
Я понимаю, что мне, вероятно, придется использовать какой-то дискретный масштаб вместо scale_fill_gradientn
, но мои попытки использовать scale_color_manual()
терпят неудачу:
ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(color = factor(qsec))) +
scale_color_manual(values=c("black", "yellow","red")
Error: Insufficient values in manual scale. 30 needed but only 4 provided.
Я предполагаю, что мне как-то придется использовать cut()
или factor()
, но я не могу понять, как это сделать. Любые предложения?
Ответы
Ответ 1
Вам нужно cut
ваши значения в интервалы:
library(ggplot2)
ggplot(mtcars, aes(wt, mpg)) +
geom_point(aes(colour = cut(qsec, c(-Inf, 17, 19, Inf))),
size = 5) +
scale_color_manual(name = "qsec",
values = c("(-Inf,17]" = "black",
"(17,19]" = "yellow",
"(19, Inf]" = "red"),
labels = c("<= 17", "17 < qsec <= 19", "> 19"))
![resulting plot]()