Question: Heatmap Visualisations?
5
Darren J. Fitzpatrick1.1k wrote:

Given a distance matrix - does anybody have any suggestions for software for producing heatmaps that is compatible with Linux. I have tried in R but it just doesn't look 'nice'.

Thanks, D.

software heatmap • 12k views
written 8.5 years ago by Darren J. Fitzpatrick1.1k
9

in short: use ggplot (or heatmap.2) instead of the standard heatmap command

7

what do you mean by not nice, which function did you use, how do you want it to look? There were some tools listed in these questions: http://biostar.stackexchange.com/questions/2499/an-interactive-heatmap-for-viewing-expression-data-matrices http://biostar.stackexchange.com/questions/921/how-to-draw-a-csv-data-file-as-a-heatmap-using-numpy-and-matplotlib

ADD REPLYlink modified 6.2 years ago • written 8.5 years ago by Michael Dondrup46k
6
Istvan Albert ♦♦ 81k wrote:

Nice is a relative term, what you probably mean that you want to customize it in a way that is not immediately available with the existing heatmap.

As it has been already mentioned by Michael in a comment (I'll add it here since I'd consider that an answer as well) you might want to consider alternative plotting libraries such as:

3
Michi950 wrote:

Biostar has the answer here:

First option is also my recommendation: gitools. since it is written in java you may use it on your linux machine without problems I hope.

ADD COMMENTlink modified 3 days ago by RamRS24k • written 8.5 years ago by Michi950
3

Here is an awesome function using ggplot to generate a heatmap(ggheat) and producing visually appealing heatmaps. Available at this post: http://rforcancer.drupalgardens.com/content/ggheat-ggplot2-style-heatmap-function

`````` ## m=matrix(data=sample(rnorm(100,mean=0,sd=2)), ncol=10)
## this function makes a graphically appealing heatmap (no dendrogram) using ggplot
## whilst it contains fewer options than gplots::heatmap.2 I prefer its style and flexibility

ggheat=function(m, rescaling='none', clustering='none', labCol=T, labRow=T, border=FALSE,
heatscale= c(low='blue',high='red'))
{
## the function can be be viewed as a two step process
## 1. using the rehape package and other funcs the data is clustered, scaled, and reshaped
## using simple options or by a user supplied function
## 2. with the now reshaped data the plot, the chosen labels and plot style are built

require(reshape)
require(ggplot2)

## you can either scale by row or column not both!
## if you wish to scale by both or use a different scale method then simply supply a scale
## function instead NB scale is a base funct

if(is.function(rescaling))
{
m=rescaling(m)
}
else
{
if(rescaling=='column')
m=scale(m, center=T)
if(rescaling=='row')
m=t(scale(t(m),center=T))
}

## I have supplied the default cluster and euclidean distance- and chose to cluster after scaling
## if you want a different distance/cluster method-- or to cluster and then scale
## then you can supply a custom function

if(is.function(clustering))
{
m=clustering(m)
}else
{
if(clustering=='row')
m=m[hclust(dist(m))\$order, ]
if(clustering=='column')
m=m[,hclust(dist(t(m)))\$order]
if(clustering=='both')
m=m[hclust(dist(m))\$order ,hclust(dist(t(m)))\$order]
}
## this is just reshaping into a ggplot format matrix and making a ggplot layer

numrows=dim(m)
numcols=dim(m)
melt.m=cbind(rowInd=rep(1:numrows, times=numcols), colInd=rep(1:numcols, each=numrows) ,melt(m))
g=ggplot(data=melt.m)

## add the heat tiles with or without a white border for clarity

if(border==TRUE)
g2=g+geom_rect(aes(xmin=colInd-1,xmax=colInd,ymin=rowInd-1,ymax=rowInd, fill=value),colour='white')
if(border==FALSE)
g2=g+geom_rect(aes(xmin=colInd-1,xmax=colInd,ymin=rowInd-1,ymax=rowInd, fill=value))

## add axis labels either supplied or from the colnames rownames of the matrix
if(length(labCol)==numcols)
{
g2=g2+scale_x_continuous(breaks=(1:numcols)-0.5, labels=labCol)
}else
{
if(labCol==T)
g2=g2+scale_x_continuous(breaks=(1:numcols)-0.5, labels=colnames(m))
if(labCol==F)
g2=g2+scale_x_continuous(breaks=(1:numcols)-0.5, labels=rep('',numcols))
}

if(length(labRow)==numrows)
{
g2=g2+scale_y_continuous(breaks=(1:numrows)-0.5, labels=labRow)
}else
{
if(labRow==T)
g2=g2+scale_y_continuous(breaks=(1:numrows)-0.5, labels=rownames(m))
if(labRow==F)
g2=g2+scale_y_continuous(breaks=(1:numrows)-0.5, labels=rep('',numrows))
}
## get rid of grey panel background and gridlines

g2=g2+opts(panel.grid.minor=theme_line(colour=NA), panel.grid.major=theme_line(colour=NA),
panel.background=theme_rect(fill=NA, colour=NA))

## finally add the fill colour ramp of your choice (default is blue to red)-- and return
return(g2+scale_fill_continuous("", heatscale, heatscale))

}
``````

Usage:(ripped from the same page)

``````data(mtcars)
x=as.matrix(mtcars)
ggheat(x, clustering='column', rescaling='row', heatscale=c(low='red', high='yellow'))
``````
2
Burke270 wrote:

I have found the following web app / source code to be a great way to visualize data as a heatmap. It is customizable enough for my needs while having almost no learning curve. Platform independant as well as it is written in C.

http://www.bioinformatics.ubc.ca/matrix2png/index.html

Update: If you are not opposed to doing a little programming, the python graphing class matlibplot has a nice heatmap output. An example with code can be found here: http://stackoverflow.com/questions/2369492/generate-a-heatmap-in-matplotlib-using-a-scatter-data-set

ADD COMMENTlink modified 3 days ago by RamRS24k • written 8.5 years ago by Burke270