【问题标题】:R draw heatmap with clusters, but hide dendrogramR用集群绘制热图,但隐藏树状图
【发布时间】:2015-07-05 18:45:21
【问题描述】:

默认情况下,R 的heatmap 将聚集行和列:

mtscaled = as.matrix(scale(mtcars))
heatmap(mtscaled, scale='none')

我可以禁用集群:

heatmap(mtscaled, Colv=NA, Rowv=NA, scale='none')

然后树状图消失:

但现在数据不再聚类了。

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

我想要的例子:

【问题讨论】:

  • 帮助关闭以下作为推荐答案 - 如果它解决了您的问题

标签: r plot visualization heatmap


【解决方案1】:
library(gplots)
heatmap.2(mtscaled,dendrogram='none', Rowv=TRUE, Colv=TRUE,trace='none')

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

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

【讨论】:

  • gplots 无法为 R 3.5.2 加载,因为它无法加载依赖项 caTools,也无法从 CRAN 存储库中获得该依赖项。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    您可以使用pheatmap

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

    在此处查看 pheatmap 输出:

    【讨论】:

    • pheatmap 默认集群 (cluster_rows = TRUE, cluster_cols = TRUE)
    【解决方案4】:

    对于ComplexHeatmap,有去除树状图的函数参数:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        您可以依赖基本 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")
        

        无需安装额外的垃圾。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-07
          • 2013-07-25
          • 2019-06-10
          • 1970-01-01
          • 1970-01-01
          • 2013-11-12
          • 1970-01-01
          • 2015-03-17
          相关资源
          最近更新 更多