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” –
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:
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.
display.brewer.pal(3, “Greys”) display.brewer.pal(6, “Accent”)
Thereon, create your own color palette using:
You could also let ColorBrewer decide red-green colorblind friendly palettes, using:
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:
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!