How often have you had to squint at figures with unpleasant color palettes in a manuscript online or in print, and ultimately given up on distinguishing between fifty (or maybe just around 30) shades of gray?
I found the RColorBrewer package extremely helpful when it comes to picking colors for figures – instead of the standard way of letting R decide your palette (using say ‘rainbow’, or ‘topo.colors’ – see this link).
Here I describe some uses of RColorBrewer to make neat admixture bar-plots in R. You should be able to use the same color palettes for use in other kinds of plots as well (see my previous posts).
Say you have a Q (admixture proportion) matrix obtained from your favorite program (STRUCTURE/ADMIXTURE/FASTRUCT/etc) – named q.txt. Here, I ran multinomial clustering with K = 3 subpopulations, requiring a three color palette from RColorBrewer. The data set that I used was mined from the Tishkoff lab as part of the supplementary material of a paper on microsatellite variation in African populations. Eg: “q.txt” –
1 2 3 4 5 6 7 8 9 10 11 12 13 | 0 1 0 0.312204 0.687796 0 0 1 0 0 1 0 0 0.88985 0.11015 0.457319 0.542681 0 0.149153 0.850847 0 0.451845 0.477733 0.070422 0.405077 0.350571 0.244352 0 1 0 0 1 0 0.131876 0.707725 0.1604 ... |
To read the data file, install libraries:
1 2 3 4 | install.packages (“RColorBrewer”) library (RColorBrewer) q<- read.table (“q.txt”) barplot ( t ( as.matrix (q)),col= rainbow (3),xlab= "Individual #" , ylab= "Ancestry" ,border= NA ) |
This should produce a bar plot with generic colors, picked using the ‘rainbow’ function.
To use ColorBrewer, I recommend playing around with different accent colors (you should be able to display them all using the display.brewer.pal(n, name) function. Alternately, you should be able to visualize a variety of schemes on the ColorBrewer2 website here.
For example:
1 2 | display.brewer.pal (3, “Greys”) display.brewer.pal (6, “Accent”) |
Thereon, create your own color palette using:
1 | mypal<- brewer.pal (3, “Accent”) |
You could also let ColorBrewer decide red-green colorblind friendly palettes, using:
1 | mypal<- display.brewer.all (3, “Accent”, colorblindFriendly= TRUE ) |
Now you should be able to plot this directly by plugging your customized palette into the barplot function as:
1 | barplot ( t ( as.matrix (q)),col=mypal,xlab= "Individual #" , ylab= "Ancestry" ,border= NA ) |
Here are two examples – one in grayscale, one using a spectral color scheme.
Speaking of colors, here are some spectacular images from Holi celebrations across the world! Happy Spring, everyone!