[BioC] colors on heatmap

Warnes, Gregory R gregory_r_warnes at groton.pfizer.com
Fri Sep 12 15:06:08 MEST 2003


In the next release of the gregmisc packages I'll be including a  couple of
functions to make colorizing heatmaps easier.  (As well as an enhanced
heatmap function.)

First the code:


# detect odd/even integers
odd <- function(x) x!=as.integer(x/2)*2
even <- function(x) x==as.integer(x/2)*2 

# Generat a set of n colors which smoothly transition from 'low' to 'mid' to
'high'.
colorpanel <- function(n,low='green',mid='black',high='red')
  {
    if(even(n)) warning("n is even: colors panel will not be symmetric")

    # convert to rgb
    low <- col2rgb(low)
    mid <- col2rgb(mid)
    high <- col2rgb(high)

    # determine length of each component
    lower <- floor(n/2)
    upper <- n - lower
    
    red  <- c(
              seq(low[1,1], mid [1,1], length=lower),
              seq(mid[1,1], high[1,1], length=upper)
              )/255

    green <- c(
               seq(low[3,1], mid [3,1], length=lower),
               seq(mid[3,1], high[3,1], length=upper)
               )/255

    blue <- c(
              seq(low[2,1], mid [2,1], length=lower),
              seq(mid[2,1], high[2,1], length=upper)
              )/255

             
    rgb(red,blue,green)
  }



# Generate red-black-green colorscale
redgreen <- function(n) colorpanel(n, 'red', 'black', 'green')

# Generate green-black-red colorscale
greenred <- function(n) colorpanel(n, 'green', 'black', 'red' )

# Generate blue white red colorscale
bluered  <- function(n) colorpanel(n, 'blue','white','red')

----

The use is straightforward.  To colorize a heatmap green-black-red, simply
do:

 x <- matrix(runif(1000), 50, 20)
 hv <- heatmap(x, col = redgreen(32))

-Greg


> -----Original Message-----
> From: Johannes Freudenberg [mailto:mai98ftu at studserv.uni-leipzig.de]
> Sent: Friday, September 12, 2003 1:16 PM
> To: Sean Davis
> Cc: Bioconductor at stat.math.ethz.ch
> Subject: Re: [BioC] colors on heatmap
> 
> 
> Sean,
> 
> I'm not quite sure what the standard green/black/red color 
> map is but i'm 
> assuming that green means low values, red means high values 
> and black is in the 
> middle?
> 
> You could define a function which returns colors following 
> that scheme as 
> follows:
> 
> > my.colors <- function(n = 50, low.col = 0.45, high.col=1, 
> saturation = 1) {
>   if (n < 2) stop("n must be greater than 2")
>   n1 <- n%/%2
>   n2 <- n - n1
>   c(hsv(low.col, saturation, seq(1,0,length=n1)),
>      hsv(high.col, saturation, seq(0,1,length=n2)))
> }
> 
> You could then use this function within the heatmap function:
> 
> > x <- matrix(runif(1000), 50)
> > hv <- heatmap(x, col = my.colors(), main = "Random U[0,1] heatmap")
> 
> I hope that helps,
> Johannes
> 
> 
> Quoting Sean Davis <Sean.Davis at dcb.cit.nih.gov>:
> 
> > I would like to use "heatmap" to display my data and 
> wondered if anyone
> > had any suggestions on making a color scheme that works to 
> create the
> > standard green/black/red color map.
> > 
> > Thanks
> > 
> > _______________________________________________
> > Bioconductor mailing list
> > Bioconductor at stat.math.ethz.ch
> > https://www.stat.math.ethz.ch/mailman/listinfo/bioconductor
> >
> 
> _______________________________________________
> Bioconductor mailing list
> Bioconductor at stat.math.ethz.ch
> https://www.stat.math.ethz.ch/mailman/listinfo/bioconductor
> 


LEGAL NOTICE\ Unless expressly stated otherwise, this messag...{{dropped}}



More information about the Bioconductor mailing list