I'm trying to come up with a consistent way of representing each factor in my dataset when plotting them. So, for example, I could have the levels of "Part of Speech" represented by different shades of blue every time I'm graphing something involving part of speech:
eg.dat <- data.frame(rt=c(530, 540, 555),
part.of.speech=c("Verb", "Noun", "Both")
)
ggplot(eg.dat, aes(part.of.speech, rt, fill=part.of.speech)) +
geom_bar(stat="identity", colour="black") +
scale_fill_manual(values=c("cyan", "blue", "darkblue"))
Coming up with fancy colour names like this for every factor is difficult, however, so I've been looking for more automatic solutions. One fairly hackish workaround is to use alpha
:
ggplot(eg.dat, aes(part.of.speech, rt, alpha=part.of.speech)) +
geom_bar(stat="identity", colour="black", fill="blue") +
scale_alpha_discrete(range=c(0.4, 1))
But I've been wondering whether there's any easier way to select a short range of similar colours like this. The scale_colour_gradient
type functions in ggplot2
don't work with discrete factors like these, and it doesn't seem particularly easy to get custom colours out of rainbow
or heat.colors
. The ideal function would be something like:
shades(n, central_colour="blue")
, returning n
colour values. Any suggestions for the best way to achieve this?
scale_fill_discrete
or scale_fill_hue
will do this. You can define h
, c
and l
(hue, chroma and luminance). See ?hcl
for more detail
eg.
ggplot(eg.dat, aes(part.of.speech, rt, fill=part.of.speech)) +
geom_bar(stat="identity", colour="black") +
scale_fill_discrete( h =c(220,260))
scale_fill_hue
will give the same results (in this case).
You could also use scale_fill_brewer
which uses the RColorBrewer
package and gives access to the colorbrewer palettes
ggplot(eg.dat, aes(part.of.speech, rt, fill=part.of.speech)) +
geom_bar(stat="identity", colour="black") +
scale_fill_brewer(palette = 'Blues')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With