ggplot geom_point() 具有基于特定离散值的颜色

ggplot geom_point() with colors based on specific, discrete values

我正在尝试为三个值范围绘制具有三种不同颜色的数据点。例如:

library(ggplot2)
ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(colour = qsec))

以上产生:

现在,我想修改它,使 qseq 值 <17 为黑色,17 到 19 之间的值为黄色,大于 19 的值为红色。我尝试了各种方法,但其中 none 似乎有效:

这会产生:

所以,颜色栏看起来是正确的,但实际上并没有应用颜色。

我意识到我可能需要使用某种离散比例而不是 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(),但我似乎不知道如何使用。有什么建议吗?

您需要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"))