Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

heatmap.2 specify row order OR prevent reorder?

Tags:

r

matrix

heatmap

I'm trying to generate some plots of log-transformed fold-change data using heatmap.2 (code below).

I'd like to order the rows in the heatmap by the values in the last column (largest to smallest). The rows are being ordered automatically (I'm unsure the precise calculation used 'under the hood') and as shown in the image, there is some clustering being performed.

sample_data

gid     2hrs    4hrs    6hrs    8hrs
1234    0.5     0.75    0.9     2
2234    0       0       1.5     2
3234    -0.5    0.1     1       3
4234    -0.2    -0.2    0.4     2
5234    -0.5    1.2     1      -0.5
6234    -0.5    1.3     2      -0.3
7234    1       1.2    0.5      2
8234    -1.3    -0.2    2       1.2
9234    0.2     0.2     0.2     1
0123    0.2     0.2     3       0.5

code

data <- read.csv(infile, sep='\t',comment.char="#")
rnames <- data[,1]                 # assign labels in column 1 to "rnames"
mat_data <- data.matrix(data[,2:ncol(data)])  # transform columns into a matrix
rownames(mat_data) <- rnames                  # assign row names

# custom palette
my_palette <- colorRampPalette(c("turquoise", "yellow", "red"))(n = 299)
# (optional) defines the color breaks manually for a "skewed" color transition
col_breaks = c(seq(-4,-1,length=100),  # for red
seq(-1,1,length=100),              # for yellow
seq(1,4,length=100))              # for green

# plot data
heatmap.2(mat_data,
density.info="none",  # turns off density plot inside color legend
trace="none",         # turns off trace lines inside the heat map
margins =c(12,9),     # widens margins around plot
col=my_palette,       # use on color palette defined earlier
breaks=col_breaks,    # enable color transition at specified limits
dendrogram='none',     # only draw a row dendrogram
Colv=FALSE)            # turn off column clustering

Plot

enter image description here

I'm wondering if anyone can suggest either how to turn off reordering so I can reorder my matrix by the last column and force this order to be used, or alternatively hack the heatmap.2 function to do this.

like image 902
user1995839 Avatar asked Jan 15 '15 08:01

user1995839


1 Answers

You are not specifying Rowv=FALSE and by default the rows are reordered (in heatmap.2 help, for parameter Rowv :

determines if and how the row dendrogram should be reordered. By default, it is TRUE, which implies dendrogram is computed and reordered based on row means. If NULL or FALSE, then no dendrogram is computed and no reordering is done.

So if you want to have the rows ordered according to the last columns, you can do :

mat_data<-mat_data[order(mat_data[,ncol(mat_data)],decreasing=T),]

and then

heatmap.2(mat_data,
density.info="none",  
trace="none",         
margins =c(12,9),    
col=my_palette,       
breaks=col_breaks,   
dendrogram='none',     
Rowv=FALSE,
Colv=FALSE)     

You will get the following image : enter image description here

like image 105
Cath Avatar answered Oct 23 '22 19:10

Cath