Heatmap和K-means Clustering

经常会碰到一组矩阵数据,然后想把他们用heatmap的形式呈现出来。今天又碰到了一组,同时希望能把它用K-means按行聚类,用hierarchical按列聚类。

假设从文件读取这样一个数据框,可以在读取时加入row.names=1和head=T,给数据框的行列命名,这样就能轻松地将数据框用as.matrix轻松的转换成矩阵。

# read data in an easy way to convert data frame into matrix
df <- read.table("file.txt", row.names=1, head=T)
df.m <- as.matrix(df)

有了矩阵其实就可以很轻松地画出heatmap了,格式和聚类方法都使用默认参数:

heatmap(df.m)

或者使用gplots包里的heatmap.2

library("gplots")
heatmap.2(df.m)

在默认图形的基础上,想更换行的聚类方法,但heatmap和heatmap.2里并没有K-means聚类,所以我在这里的做法就是先把数据按k-means聚类然后排序,再用heatmap.2绘制heatmap,并设置Rowv=FALSE, trace=”none”去掉heatmap.2中默认的实线。

# k-means clustering
cl <- kmeans(df.m, centers=3)

# use order to sort a vector named $cluster in list cl
# it returns an index
order.idx <- order(cl$cluster)

# use the index to sort the original matrix by row
# note: row 1: [1,] / column 1: [,1]
df.m.order <- df.m[order.idx,]
heatmap.2(df.m.order, Rowv=FALSE, Colv=TRUE, trace="none")

这样一个简单的heatmap就做好了,可以通过调整其他参数,使得图形更优雅些。参数调整的差不多满意后,就可以写个小函数,以后碰到类似数据就可以直接作图先看看了。

__END__
Advertisements