Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change the color key value in heatmap.2?

Tags:

r

heatmap

enter image description here

As the above screenshot showed, I used the function heatmap.2() here.

how can I change 'Value' in the color coded bar to any other name?

One can just use the data from gplots package:

 library(gplots)

 data(mtcars)

 x  <- as.matrix(mtcars)

 rc <- rainbow(nrow(x), start=0, end=.3)

 cc <- rainbow(ncol(x), start=0, end=.3)

 heatmap.2(x, key=TRUE)

Many thanks :-)

like image 635
Matt Avatar asked Dec 09 '22 20:12

Matt


2 Answers

The function heatmap.2 may have changed since @BondedDust answered, but its now possible to easily change the heatmap.2 key labels via:

key.xlab="New value"

First, your code from above (using the standard colors):

library(gplots)
data(mtcars)
x  <- as.matrix(mtcars)
heatmap.2(x,key=TRUE)

Before screenshot of key

Now replace the x and y labels:

library(gplots)
data(mtcars)
x  <- as.matrix(mtcars)
heatmap.2(x, key=TRUE , key.xlab="New value", key.ylab="New count")

After screenshot of key

like image 195
milo Avatar answered Jan 04 '23 18:01

milo


It's hard-coded. You will need to change it in the code. It appears about midway down the section that draws the key and the line is:

else mtext(side = 1, "Value", line = 2)

This is the section of the heatmap.2 code that creates the key (at least up to the point where the word "Value" appears) :

 if (key) {
        par(mar = c(5, 4, 2, 1), cex = 0.75)
        tmpbreaks <- breaks
        if (symkey) {
            max.raw <- max(abs(c(x, breaks)), na.rm = TRUE)
            min.raw <- -max.raw
            tmpbreaks[1] <- -max(abs(x), na.rm = TRUE)
            tmpbreaks[length(tmpbreaks)] <- max(abs(x), na.rm = TRUE)
        }
        else {
            min.raw <- min(x, na.rm = TRUE)
            max.raw <- max(x, na.rm = TRUE)
        }
        z <- seq(min.raw, max.raw, length = length(col))
        image(z = matrix(z, ncol = 1), col = col, breaks = tmpbreaks, 
            xaxt = "n", yaxt = "n")
        par(usr = c(0, 1, 0, 1))
        lv <- pretty(breaks)
        xv <- scale01(as.numeric(lv), min.raw, max.raw)
        axis(1, at = xv, labels = lv)
        if (scale == "row") 
            mtext(side = 1, "Row Z-Score", line = 2)
        else if (scale == "column") 
            mtext(side = 1, "Column Z-Score", line = 2)
        else mtext(side = 1, "Value", line = 2)
 .... lots more code below

You should type heatmap.2 , then copy the source code to an editor and then use the search function to find "Value". Change "Value" to something else (in quotes) and then type heatmap.2 <- and paste in the code and hit return. (Unless you save this it will only persist as long as the session continues.)

like image 34
IRTFM Avatar answered Jan 04 '23 18:01

IRTFM