Reputation: 63
I have a data set that contains 2 variables x
= event number & y
= assay amplitude. I am trying to create a scatterplot in ggplot2
where all of the points that are > 3000
are colored in one color and all of the points < 3000
are in a different color.
I can get the plot and change the color for all data points, but can't figure out how to define a color scheme based on the value threshold.
Here is a sample of the data I'm using:
dat <- data.frame(x=c(399, 16022, 14756, 2609, 1131, 12135,
7097, 12438, 12604, 14912, 11042,
14024, 7033, 4971, 15533, 4507, 4627,
12600, 7458, 14557, 3999, 3154, 6073),
y=c(3063.40137, 3687.42041, 3911.856,
4070.91748, 4089.99561, 4095.50317,
4159.899, 4173.117, 4177.78955,
4186.46875, 4201.874, 4272.022,
638.615, 649.8995, 668.8346,
688.754639, 711.92, 712.689636,
721.1352, 737.841, 741.0727,
755.2549, 756.730652))
Upvotes: 6
Views: 7412
Reputation: 712
This can be done on the fly with an ifelse
statement and without having to create an extra column in the dataset:
ggplot(dat, aes(x = x, y = y)) +
geom_point(aes(color = ifelse(y>3000, 'red', 'blue'))) +
scale_colour_manual(labels = c("<3000", ">3000"), values=c('blue', 'red')) +
labs(color = "Values")
Upvotes: 1
Reputation: 145965
You really just need to do a new indicator variable for this. As @hrbrmstr says, cut
is a good general way to do this (works for as many cutpoints as you want).
dat$col <- cut(dat$y,
breaks = c(-Inf, 3000, Inf),
labels = c("<=3000", ">3000"))
ggplot(dat, aes(x = x, y = y, color = col)) +
geom_point()
Upvotes: 7