1.需求
如圖,熱圖自帶聚類樹条摸,將樣本(列)分成了三個(gè)簇悦污。想要按照聚類的結(jié)果,獲取到每個(gè)樣本具體屬于哪一簇的信息钉蒲,并將這個(gè)信息添加到熱圖上切端。
2.作圖的數(shù)據(jù)
輸入數(shù)據(jù)是個(gè)表達(dá)矩陣,行為基因顷啼,列為樣本踏枣,用隨機(jī)數(shù)整一個(gè)小压。
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ī)的熱圖很簡(jiǎn)單
p = pheatmap::pheatmap(n,show_colnames = F,scale = "row")
我們能知道圖上樣本的排列順序,但是不知道每一簇都有多少個(gè)樣本椰于,對(duì)應(yīng)著哪些。
讓三簇分的更清楚一些
p2 = pheatmap::pheatmap(n,show_colnames = F,scale = "row",cutree_cols = 3)
加上cutree_cols參數(shù)仪搔,熱圖上就有了溝瘾婿,將樣本分成了指定數(shù)量的組。
還是不知道怎樣能得出三組個(gè)自是哪些樣本的信息烤咧。我以為p2$tree_col$order
里面會(huì)指明偏陪,然而并沒有。
遂煮嫌,搜索關(guān)鍵詞get cluster in pheatmap笛谦,找到了一個(gè)網(wǎng)頁:https://www.biostars.org/p/287512/ ,看到cutree居然還是個(gè)單獨(dú)的函數(shù)昌阿。摸索了一下怎么使用
m = cutree(p2$tree_col,k = 3)
head(m)
## sample1 sample2 sample3 sample4 sample5 sample6
## 1 2 2 2 1 3
這就完事兒了饥脑。m里面記錄了每個(gè)樣本屬于哪個(gè)分組。這就是我想要的信息懦冰。
3.在熱圖上添加聚類分組信息
常規(guī)的差異分析也會(huì)用到列注釋熱圖來展示數(shù)據(jù)的分組灶轰,那是已知分組,直接展示兩組間差別的刷钢,和今天做的根據(jù)聚類的結(jié)果來分組不一樣的哦
至于列注釋如何添加上去查看幫助文檔笋颤,按照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ù)聚類的結(jié)果來給原來的矩陣列(樣本)分了組~