> Thanks Kevin, I experienced the same problems with heatmap.2, and therefore 
> resorted to heatmap. For heatmap, the code change I suggested below fixes the 
> problem with side color ordering as far as I can tell, and lets one create a 
> symmetric heatmap with the origin at the top left (which I agree makes it 
> easier to read). Unless this code change breaks something else, it would be 
> nice if it could be incorporated into R.

It now has been incorporated:
For 2.15.0 (due in less than three weeks, see "Release Plans" on
    http://developer.r-project.org/)

Thanks you very much, Pär (and Kevin) !

Martin

> P�r

> On 8 Mar 2012, at 17:27, Kevin R. Coombes wrote:

> > First, I can confirm this problem exists today, and can now vaguely recall 
> > seeing it in previous version of R.
> > > sessionInfo()
> > R version 2.14.1 (2011-12-22)
> > Platform: x86_64-pc-mingw32/x64 (64-bit)
> >
> > There is a bigger problem with heatmap.2 in the gplots package.  Using 
> > "symm=TRUE" with no other arguments causes it to fail to print one of the 
> > dendrograms:
> > > library(gplots)
> > > cU <- cor(USJudgeRatings)
> > > heatmap.2(cU, symm = TRUE)
> > Warning message:
> > In heatmap.2(cU, symm = TRUE) :
> >   Discrepancy: Colv is FALSE, while dendrogram is `row'. Omitting column 
> > dendogram.
> >
> > In order to get the column dendrogram displayed using heatmap.2, you must 
> > use "symm=TRUE, Colv=TRUE".  So this succeeds:
> > >  heatmap.2(cU, symm = TRUE, Colv=TRUE)
> >
> > To make things worse, heatmap.2 sometimes gets the direction of the column 
> > colors wrong.  If you omit "Colv=TRUE", it leaves out the column dendrogram 
> > and gets one set of colors wrong.  That, is, the following command fails in 
> > two ways:
> > > sideCols <- rainbow(ncol(cU))
> > > heatmap.2(cU, symm = TRUE, distfun = function(c) as.dist(1 - c),
> >        ColSideColors=sideCols, RowSideColors=sideCols)
> >
> > If you include "Colv=TRUE", then it prints the dendrogram and gets both 
> > sets of colorbars correct.  So the following command succeeds:
> > > heatmap.2(cU, symm = TRUE, Colv=TRUE, distfun = function(c) as.dist(1 - 
> > > c),
> > +        ColSideColors=sideCols, RowSideColors=sideCols)
> >
> > It is a separate esthetic question as to which diagonal axis should be used 
> > for symmetry. When it works in heatmap.2, the "origin" is at the bottom 
> > left.  Since the dendrograms are printed on the top and left, however, the 
> > symmetry would be easier to see/confirm if the origin were put at the top 
> > left. One might be tempted to fit this by using "revC=TRUE".  However, this 
> > command fails because it gets the colorbar wrong:
> > > heatmap.2(cU, symm = TRUE, Colv=TRUE, revC=TRUE,
> >           distfun = function(c) as.dist(1 - c),
> >           ColSideColors=sideCols, RowSideColors=sideCols)
> >
> > I am occasionally of the opinion that both "heatmap" and "heatmap.2" are 
> > too complex to be used reliably by mortals....
> >     Kevin
> >
> > On 2/28/2012 4:04 AM, P�r Engstr�m wrote:
> >>
> >> Hello,
> >>
> >> I have come across some unexpected behaviour of the function heatmap in 
> >> the stats package. This looks like a bug to me, but I might have 
> >> misunderstood something.
> >>
> >> When calling the function in symmetric mode, the ColSideColors are plotted 
> >> correctly, but RowSideColors appear in reverse order. This code (modified 
> >> from the example on the help page) demonstrates the problem:
> >>
> >> cU <- cor(USJudgeRatings)
> >> sideCols <- rainbow(ncol(cU))
> >> heatmap(cU, symm = TRUE, distfun = function(c) as.dist(1 - c),
> >>        ColSideColors=sideCols, RowSideColors=sideCols)
> >>
> >> Reversing the RowSideColors argument does not solve the problem:
> >>
> >> heatmap(cU, symm = TRUE, distfun = function(c) as.dist(1 - c),
> >>        ColSideColors=sideCols, RowSideColors=rev(sideCols))
> >>
> >> I had a look at the the function code and found that this change fixes the 
> >> problem:
> >>
> >> Replace
> >>
> >>        image(rbind(1L:nr), col = RowSideColors[rowInd], axes = FALSE)
> >>
> >> with
> >>
> >>        image(rbind(if(revC) nr:1L else 1L:nr), col = 
> >> RowSideColors[rowInd], axes = FALSE)
> >>
> >> I am using the current version of R for Mac OS X:
> >>
> >>> sessionInfo()
> >> R version 2.14.1 (2011-12-22)
> >> Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
> >>
> >> locale:
> >> [1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
> >>
> >> attached base packages:
> >> [1] stats     graphics  grDevices utils     datasets  methods   base
> >>
> >>
> >> Regards,
> >>
> >> P�r Engstr�m
> >>
> >> Postdoctoral Fellow
> >> EMBL European Bioinformatics Institute
> >> Wellcome Trust Genome Campus
> >> Hinxton, Cambridge, UK

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to