1.需求

如圖,熱圖自帶聚類樹,將樣本(列)分成了三個簇。想要按照聚類的結果,獲取到每個樣本具體屬于哪一簇的信息,并將這個信息添加到熱圖上。
2.作圖的數(shù)據(jù)
輸入數(shù)據(jù)是個表達矩陣,行為基因,列為樣本,用隨機數(shù)整一個。
rm(list = ls())
n = matrix(rnorm(800),nrow = 8)
n[,1:30] = n[,1:30]+ 3
n[,60:100] = n[,60:100] +6
n = n[,sample(1:100,100)]
rownames(n) = paste0("gene",1:8)
colnames(n) = paste0("sample",1:100)
n[1:4,1:4]
## sample1 sample2 sample3 sample4
## gene1 0.5794523 3.837055 2.779561 2.817760
## gene2 0.3623024 4.440195 3.973745 1.896885
## gene3 -0.7953442 3.026784 2.260808 2.363162
## gene4 -0.2121879 1.033756 1.997658 3.837127
3.熱圖探索
常規(guī)的熱圖很簡單
p = pheatmap::pheatmap(n,show_colnames = F,scale = "row")

我們能知道圖上樣本的排列順序,但是不知道每一簇都有多少個樣本,對應著哪些。
讓三簇分的更清楚一些
p2 = pheatmap::pheatmap(n,show_colnames = F,scale = "row",cutree_cols = 3)

加上cutree_cols參數(shù),熱圖上就有了溝,將樣本分成了指定數(shù)量的組。
還是不知道怎樣能得出三組個自是哪些樣本的信息。我以為p2$tree_col$order里面會指明,然而并沒有。
遂,搜索關鍵詞get cluster in pheatmap,找到了一個網(wǎng)頁:https://www.biostars.org/p/287512/ ,看到cutree居然還是個單獨的函數(shù)。摸索了一下怎么使用
m = cutree(p2$tree_col,k = 3)
head(m)
## sample1 sample2 sample3 sample4 sample5 sample6
## 1 2 2 2 1 3
這就完事兒了。m里面記錄了每個樣本屬于哪個分組。這就是我想要的信息。
3.在熱圖上添加聚類分組信息
常規(guī)的差異分析也會用到列注釋熱圖來展示數(shù)據(jù)的分組,那是已知分組,直接展示兩組間差別的,和今天做的根據(jù)聚類的結果來分組不一樣的哦
至于列注釋如何添加上去查看幫助文檔,按照annotation_col參數(shù)的示例來組織數(shù)據(jù)即可啦!
an = data.frame(row.names = colnames(n),
m = factor(m,labels = c("A","B","C")))
pheatmap::pheatmap(n,show_colnames = F,scale = "row",cutree_cols = 3,
annotation_col = an)

這樣 我們就根據(jù)聚類的結果來給原來的矩陣列(樣本)分了組~