[BioC] ggplots2 - heatmap2 colour labels

James W. MacDonald jmacdon at uw.edu
Tue Oct 2 16:32:20 CEST 2012


Hi Paolo,

First, I am assuming here that your subject line is incorrect, and that 
you are talking about the heatmap.2() function in gplots, not something 
that is in ggplot2.

On 10/2/2012 8:56 AM, Paolo Kunderfranco wrote:
> Dear All,
> I would like to add colours to my heatmap, for instance I have a set
> of genes, some are up-regulated and some are down-regulated
>
> example
> this is my data.matrix
>> x
> Pfdn5         11.73  1.000
> Aqp1           9.25  1.000
> Lims2         11.15  1.000
> Chrac1         1.00 13.990
> Sdhb           1.00  7.460
> Phpt1          8.28  1.000
> Dhrs7c        10.93  1.000
> Mrpl30         1.00  7.690
> Mrps35        11.15  1.000
> Mlf1          18.50  1.000
> Atp5h          9.29  1.000
>
>
> heatmap.2(x, Colv=F, Rowv=F,cexCol=0.5, main="test",
> cexRow=0.3,scale="row", col=greenred(75), key=F, trace="none")
>
>
>
> I would like to plot the first 3 labels in red and the rest in blue,
> is it possible with heatmap.2 function?

Not easily. You would have to modify the code to heatmap.2() to accept 
the two color arguments, as well as calling axis() twice. The relevant 
part of heatmap.2() looks like this:

  if (!invalid(na.color) & any(is.na(x))) {
         mmat <- ifelse(is.na(x), 1, NA)
         image(1:nc, 1:nr, mmat, axes = FALSE, xlab = "", ylab = "",
             col = na.color, add = TRUE)
     }
     axis(1, 1:nc, labels = labCol, las = 2, line = -0.5, tick = 0,
         cex.axis = cexCol)
     if (!is.null(xlab))
         mtext(xlab, side = 1, line = margins[1] - 1.25)
     axis(4, iy, labels = labRow, las = 2, line = -0.5, tick = 0,
         cex.axis = cexRow)

Where the two calls to axis() put the horizontal and vertical axis 
labels on. In particular, the last axis() call does the row names.

The problem here is that you can only pass a single color for the axis 
labels, so you will have to call axis(4, <otherstuff>) twice to do the 
two different colors. So you will have to change that last call to do 
just the first 3, with the col.axis argument set to "red", and then the 
remaining labels with the col.axis argument set to "blue". Something 
like (untested):

axis(4, iy[1:3], labRow[1:3], las=2, line=-0.5, tick=0,cex.axis=cexRow, 
col.axis="red")
axis(4, iy[-c(1:3)], labRow[-c(1:3)], las=2, line=-0.5, 
tick=0,cex.axis=cexRow, col.axis="blue")

I'll leave the rest of it up to you. You might need to google things 
like 'R modify code' or some such if you don't know how to extract and 
modify existing code in R.

Best,

Jim


> Thanks,
> Paolo
>
> _______________________________________________
> Bioconductor mailing list
> Bioconductor at r-project.org
> https://stat.ethz.ch/mailman/listinfo/bioconductor
> Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor

-- 
James W. MacDonald, M.S.
Biostatistician
University of Washington
Environmental and Occupational Health Sciences
4225 Roosevelt Way NE, # 100
Seattle WA 98105-6099



More information about the Bioconductor mailing list