ggplot geom_point () avec des couleurs basées sur des valeurs discrètes spécifiques

Je suis en train de tracer les points de données avec trois couleurs différentes pour les trois gammes de valeur. Par exemple:

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

Le produit ci-dessus:

ggplot geom_point () avec des couleurs basées sur des valeurs discrètes spécifiques

Maintenant, je voudrais modifier cela pour que qseq valeurs <17 sont en noir, les valeurs entre 17 et 19 sont de couleur jaune et les valeurs au-dessus de 19 sont en rouge. J'ai essayé différentes approches, mais aucune ne semble fonctionner:

  • Prises de ici
    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")))

    Ce produit:

    ggplot geom_point () avec des couleurs basées sur des valeurs discrètes spécifiques

    Ainsi, la barre de couleur semble correcte, mais les couleurs ne sont pas effectivement appliquées.

  • Les solutions données dans ggplot2 heatmap avec des couleurs pour variait valeurs semblent prometteuses mais je n'arrive pas à travailler avec geom_point().
  • En va de même pour de nombreux autres postes tels que ceux énumérés dans la barre latérale.

Je me rends compte que j'ai sans doute besoin d'utiliser une sorte de discrète à l'échelle au lieu de scale_fill_gradientn mais mes tentatives d'utilisation de scale_color_manual() échouer:

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.

Je devine que je vais en quelque sorte avoir à utiliser cut() ou factor() mais je n'arrive pas à comprendre comment. Des suggestions?

source d'informationauteur terdon