Palettes in R
[This article was first published on Mollie's Research Blog, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
In its simplest form, a palette in R is simply a vector of colors. This vector can be include the hex triplet or R color names.Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
The default palette can be seen through palette():
> palette("default") # you'll only need this line if you've previously changed the palette from the default > palette() [1] "black" "red" "green3" "blue" "cyan" "magenta" "yellow" [8] "gray"
Defining your own palettes
If you want to make your own palette, you can just create your own vector of colors. It’s fine for your vector to include a mixture of hex triplets and R color names. You can use the palette function above, but generally it’s best to just store each palette as a standard vector. For one thing, you can use more than one palette that way. Here’s how you can define your own palette:colors <- c("#A7A7A7", "dodgerblue", "firebrick", "forestgreen", "gold")
Now let's try using our palette. For now let's just color each bar of a histogram. This is a silly example, but I think it's the easiest way to show how to get R to utilize your palette. In the following example, there are six bars, but only five colors. You can see that R will cycle through your palette to fill all the shapes.
hist(discoveries, col = colors)
A more sensible use of color is to use a different color for each of a number of summary statistics:
colors <- c("#A7A7A7", "dodgerblue", "firebrick", "forestgreen", "gold") hist(discoveries, col = colors[1]) abline(v = mean(discoveries), col = colors[2], lwd = 5) abline(v = median(discoveries), col = colors[3], lwd = 5) abline(v = min(discoveries), col = colors[4], lwd = 5) abline(v = max(discoveries), col = colors[5], lwd = 5) legend(x = "topright", # location of legend within plot area col = colors[2:5],c("Mean", "Median", "Minimum", "Maximum"), lwd = 5)
Predefined palettes: default R palettes
The package grDevices (you probably already have this loaded) contains a number of palettes.?rainbow rainbowcols <- rainbow(6) hist(discoveries, col = rainbowcols)
For rainbow, you can adjust the saturation and value. For example:
rainbowcols <- rainbow(6, s = 0.5) hist(discoveries, col = rainbowcols)
heatcols <- heat.colors(6) hist(discoveries, col = heatcols)
As well as rainbow and heat.colors, there are also terrain.colors, topo.colors, and cm.colors.
Predefined palettes: RColorBrewer
library(RColorBrewer) display.brewer.all()
RColorBrewer palettes |
RColorBrewer works a little different than how we've defined palettes previously. We'll have to use brewer.pal to create a palette.
library(RColorBrewer) darkcols <- brewer.pal(8, "Dark2") hist(discoveries, col = darkcols)
Even though we have to provide brewer.pal with the number of colors we want, we won't necessarily need to use all those colors later. We can still choose a color from the vector like we have previously. When we're setting a col setting to the full palette, we'll be more concerned with how many colors are included in the palette , but even there, we can choose a subset of the whole palette:
darkcols <- brewer.pal(8, "Dark2") hist(discoveries, col = darkcols[1:2])
Here's the code from this post.
Now that we're familiar with making our own palettes and using the built-in palettes in grDevices and RColorBrewer, I'm planning a future post about a more practical (but also more complicated) example of using palettes: making maps.
To leave a comment for the author, please follow the link and comment on their blog: Mollie's Research Blog.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.