按照熱圖聚類結果來給樣本分組

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ù)聚類的結果來給原來的矩陣列(樣本)分了組~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容