I am trying to plot data points with three different colors for three value ranges. For example:
library(ggplot2)
ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(colour = qsec))
The above produces:
Now, I would like to modify this so that qseq values <17 are black, values between 17 and 19 are yellow and values above 19 are red. I've tried various approaches, but none of them seems to work:
Taken from here
ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(fill = qsec)) + scale_fill_gradient(colours = c("black","yellow","red"), breaks=c(0,17,19), labels = format(c("0","17","19")))
This produces:
So, the colorbar seems correct but the colors are not actually applied.
The solutions given in ggplot2 heatmap with colors for ranged values seem promising but I can't get them to work with
geom_point()
.Same goes for various similar posts such as those listed in the sidebar.
I realize I will probably need to use some kind of discrete scale instead of scale_fill_gradientn
but my attempts to use scale_color_manual()
fail:
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.
I am guessing I will somehow have to use cut()
or factor()
but I can't seem to figure out how. Any suggestions?