[英]R draw heatmap with clusters, but hide dendrogram
默認情況下,R 的heatmap
將聚集行和列:
mtscaled = as.matrix(scale(mtcars))
heatmap(mtscaled, scale='none')
我可以禁用集群:
heatmap(mtscaled, Colv=NA, Rowv=NA, scale='none')
然后樹狀圖消失了:
但是現在數據不再聚類了。
我不希望顯示樹狀圖,但我仍然希望將行和/或列聚集在一起。 我怎樣才能做到這一點?
我想要的例子:
library(gplots)
heatmap.2(mtscaled,dendrogram='none', Rowv=TRUE, Colv=TRUE,trace='none')
Rowv
-is TRUE,這意味着樹狀圖是根據行均值計算和重新排序的。
Colv
- 列應與行一樣對待。
對於 ComplexHeatmap,有刪除樹狀圖的函數參數:
library(ComplexHeatmap)
Heatmap(as.matrix(iris[,1:4]), name = "mat", show_column_dend = FALSE, show_row_dend = FALSE)
我對 pheatmap 有類似的問題,它具有更好的可視化和熱圖或 heatmap.2。 雖然 heatmap.2 是您的解決方案的選擇,這里是 pheatmap 的解決方案,通過提取聚類數據的順序。
library(pheatmap)
mtscaled = as.matrix(scale(mtcars))
H = pheatmap(mtscaled)
pheatmap(mtscaled[H$tree_row$order,H$tree_col$order],cluster_rows = F,cluster_cols = F)
使用基本的 R 熱圖函數做兩次樹狀圖。 獲取第一次運行的輸出,該輸出聚類但強制繪制樹狀圖,然后再次將其輸入熱圖函數。 這一次,沒有聚類,也沒有繪制樹狀圖。
#生成一個有一點結構的隨機對稱矩陣,並制作一個熱圖
M100s<-matrix(runif(10000),nrow=100)
M100s[2,]<-runif(100,min=0.1,max=0.2)
M100s[4,]<-runif(100,min=0.1,max=0.2)
M100s[6,]<-runif(100,min=0.1,max=0.2)
M100s[99,]<-runif(100,min=0.1,max=0.2)
M100s[37,]<-runif(100,min=0.1,max=0.2)
M100s[lower.tri(M100s)] <- t(M100s)[lower.tri(M100s)]
heatmap(M100s)
#保存輸出
OutputH <- heatmap(M100s)
#在沒有聚類或樹狀圖的情況下再次運行它
M100c <- M100s
M100c1 <- M100c[,OutputH$rowInd]
M100c2 <- M100c1[OutputH$colInd,]
heatmap(M100c2,Rowv = NA, Colv = NA, labRow = NA, labCol = NA)
您可以依賴基礎 R 結構並考慮以下基於自己構建 hclust 樹的方法。
mtscaled = as.matrix(scale(mtcars))
row_order = hclust(dist(mtscaled))$order
column_order = hclust(dist(t(mtscaled)))$order
heatmap(mtscaled[row_order,column_order], Colv=NA, Rowv=NA, scale="none")
無需安裝額外的垃圾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.