Heat map- adjusting color range

rockswap picture rockswap · May 25, 2012 · Viewed 10.2k times · Source
library(gplots)
shades= c(seq(-1,0.8,length=64),seq(0.8,1.2,length=64),seq(1.2,3,length=64))
 heatmap.2(cor_mat, dendrogram='none', Rowv=FALSE, Colv=FALSE, col=redblue(64),  
breaks=shades, key=TRUE, cexCol=0.7, cexRow=1, keysize=1)

There is some problem with breaks. Wish to receive help on it.

After running the code I get this error message

Error in image.default(1:nc, 1:nr, x, xlim = 0.5 + c(0, nc), ylim = 0.5 + : must have one more break than colour

Thank you for your time and consideration.

Answer

Fhnuzoag picture Fhnuzoag · May 25, 2012

Well, we don't have cor_mat so we can't try this ourselves, but the problem seems to be what it says on the tin, isn't it? The way heatmap (and generally all functions based on image) works with breaks and a vector of colours, is that the breaks define the points where changes in the value of your data matrix means the colour changes. In short, if break = c(1,2,3), and your col = c("red", "blue"):

  1. values < 1 will be transparent
  2. values >= 1, <= 2 will be plotted as red
  3. values > 2, <= 3 will be plotted as blue
  4. values > 3 will be transparent

What's going on in your code is that with 'shade' you've supplied a length 3*64 vector to break, while redblue(64) only gives you 64 colours. Try replacing redblue(64) with, say, redblue(3*64-1).