R用聚类绘制热图,但隐藏树状图

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')

然后树状图消失了:

但现在数据不再聚类了。

我不希望显示树状图,但我仍希望对行 and/or 列进行聚类。我该怎么做?

我想要的例子:

library(gplots)
heatmap.2(mtscaled,dendrogram='none', Rowv=TRUE, Colv=TRUE,trace='none')

Rowv - 为 TRUE,这意味着树状图是根据行均值计算和重新排序的。

Colv - 列的处理方式应与行相同。

我对 pheatmap 有类似的问题,它具有更好的可视化和热图或 heatmap.2。虽然 heatmap.2 是您的解决方案的选择,但这是通过提取聚类数据的顺序使用 pheatmap 的解决方案。

library(pheatmap)
mtscaled = as.matrix(scale(mtcars))
H = pheatmap(mtscaled)

Here is the output of pheatmap

pheatmap(mtscaled[H$tree_row$order,H$tree_col$order],cluster_rows = F,cluster_cols = F)

Here is the output of pheatmap after extracting the order of clusters

您可以使用 pheatmap:

mtscaled <- as.matrix(scale(mtcars))
pheatmap::pheatmap(mtscaled, treeheight_row = 0, treeheight_col = 0)

在此处查看作弊图输出:

对于 ComplexHeatmap,有函数参数来移除树状图:

library(ComplexHeatmap)
Heatmap(as.matrix(iris[,1:4]), name = "mat", show_column_dend = FALSE, show_row_dend = FALSE)

使用基本的 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")

不需要安装额外的垃圾。