R draw kmeans clustering with heatmap

2020-02-08 06:52发布

问题:

I would like to cluster a matrix with kmeans, and be able to plot it as heatmap. It sounds quite trivial, and I have seen many plots like this. I have tried to google atround, but can't find a way round it.

I'd like to be able to plot something like panel A or B on this figure. Let say I have a matrix with 250 rows and 5 columns. I don't want to cluster the columns, just the rows.

m = matrix(rnorm(25), 250, 5)

km = kmeans(m, 10)

Then how do I plot those 10 clusters as a heatmap ? You comments and helps is more than welcome.

Thanks.

回答1:

Something like the following should work:

set.seed(100)
m = matrix(rnorm(10), 100, 5)
km = kmeans(m, 10)
m2 <- cbind(m,km$cluster)
o <- order(m2[, 6])
m2 <- m2[o, ]
library(pheatmap) # I like esoteric packages!
library(RColorBrewer)
pheatmap(m2[,1:5], cluster_rows=F,cluster_cols=F, col=brewer.pal(10,"Set3"),border_color=NA)



回答2:

I think both the two figures should come from two figures combined. the left one is heatmap and the right is colored based on the cluster results. Of course, the data should be reordered by the result of cluster. BTW, the question is not similar with the two questions as commented below the question.