[BioC] Customizing gplots heatmap.2 - color range for heatmap and legend for RowSideColors

Wong, Chao-Jen cwon2 at fhcrc.org
Wed Nov 2 01:11:33 CET 2011

Hi, Kurinji

1. *adjusting color range on heatmap.2* 

You can use the mighty "breaks" argument to symmetrically bin your data, ranged from 0 to 1, into color. For instance,

bk <- seq(0, 1, by=0.025)
heatmap.2(z.ma, breaks=bk, col=greenred, blah, blah)

It should map values around 0.5 to black color.

2. *obtaining a legend for RowSideColors* 

First, convert your x$USCS to a factor:

f <- factor(x$UCSC)

mycol <- brewer.pal(6, "Set1") ## if you only have 6 levels
heatmap.2(z.ma, ..., RowSideColors=mycol[f])

The legend can be recreated by

legend(x="topleft", legend=levels(f), col=mycol[factor(levels(f))], pch=15)

If you want to superimpose the legend on the plot generated by heatmap.2(), you will need to adjust the x, y argument of legend() to position the legend to a more plausible place. 


----- Original Message -----
From: "Kurinji Pandiyan" <kurinji.pandiyan at gmail.com>
To: bioconductor at r-project.org
Sent: Friday, October 28, 2011 8:54:47 AM
Subject: [BioC] Customizing gplots heatmap.2 - color range for heatmap and	legend for RowSideColors

Dear All,

I am using package gplots - heatmap.2 - function to plot some data. I would
really appreciate your help customizing my heatmap in terms of -

1. *adjusting color range on heatmap.2* - I am using color "greenred" and
would like this to consistently range from 0-1. Because one of my datasets
does not have values ranging all the way to one, the color scale has been
adjusted from 0-0.5, with red being 0.5. This is confusing as it is not
consistent with all the other heatmaps where red indicates a value of 1. I
would like to change the range of the color scale to always be the same,
regardless of dataset - always 0 being green and red being 1, with a
gradation of black in between (which greenred does by default anyway)

2. *obtaining a legend for RowSideColors* - I am also trying to use a
specific column of my dataframe, which has 6 different levels of annotation,
to plot RowSideColors - I was able to do this:

x <http://hct.delta.body.ma/> <- y[,c(3,9:10)] # 3 is the column with the
levels of interest - for coloring - and is labeled "USCS"

z <http://hct.delta.ma/>.ma <- as.matrix(y[,9:10])

mycol <- c("red", "green", "blue", "purple", "yellow", "black")
heatmap.2(z.ma <http://hct.delta.ma/>, col=greenred, scale = "none",
trace="none",keysize = 1.5, main = list("Accessibility Plot", cex = 1.5),
margins = c(5,5), cexCol = 1, Rowv = "NULL", RowSideColors=mycol[as.integer(
x <http://hct.delta.body.ma/>$USCS)])

This worked well - only issue is, I am not sure how it picked which color to
which value. I was eventually able to figure it out with a small sample set
but it will be nice to not have to figure it out and to just use code to
produce a legend with color and level name. Please let me know how to
produce a legend with the colors used for RowSideColors.

I would greatly appreciate someone's input.


Graduate Student

	[[alternative HTML version deleted]]

Bioconductor mailing list
Bioconductor at r-project.org
Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor

Chao-Jen Wong 
Program in Computational Biology 
Division of Public Health Sciences 
Fred Hutchinson Cancer Research Center 
1100 Fairview Avenue N., M1-B514 
PO Box 19024 
Seattle, WA 98109 
cwon2 at fhcrc.org

More information about the Bioconductor mailing list