R/Python:层次聚类,树状图注释

R/Python: Heirarchical clustering, dendrogram annotation

我想进行层次聚类并绘制带有热图的经典树状图。在 R 中使用 heatmap.2 或 heatmap.3 相当容易,在 python 中看起来也很容易。然而,我并没有真正找到一个好的解决方案是树的注释。

理想情况下,我想根据元数据对我的分支进行颜色编码。假设我有 10k 行 5 种不同类型,在聚类之后我想可视化这些类型如何组合在一起。由于数据量大,给每一行都打上标签不太可行。

根据cluster/distance给树上色似乎并非不可能,但这并不是我真正想要的。

颜色的分类向量可以是单独的列或行名的一部分

R och Python 中的解决方案并不重要。 谢谢!

编辑:

示例:

library(gplots)
library(proxy)
df = data.frame(matrix(rnorm(100), nrow=10))
rownames(df) <- c("A_1","A_2","A_3","B_1","B_2","B_3","C_1","C_2","C_3","C_4")
df <- t(df)
distance.matrix.df <- dist(as.matrix(df), method='pearson')
clust.df1 <- hclust(distance.matrix.df, method = "average")
dend.dfc <- as.dendrogram(clust.df1)
heatmap.2(as.matrix(df), Rowv=dend.dfc, keysize=1, dendrogram="col", trace="none")

输出:Here

期望的输出:Here

在 R 中你可以这样尝试:

library(dendextend)
dend <- df %>% t %>% dist %>% hclust %>% as.dendrogram %>% 
  branches_attr_by_clusters(as.numeric(as.factor(substr(labels(.), 0, 1))), 
                            attr="col")
heatmap.2(as.matrix(df), Rowv=dend.dfc, Colv=dend, keysize=1, 
          dendrogram="col", trace="none")

这给你这样的东西: