如何在分层热图树状图中添加聚类矩形

Posted

技术标签:

【中文标题】如何在分层热图树状图中添加聚类矩形【英文标题】:How to add clustering rectangle in hierarchical heatmap dendogram 【发布时间】:2013-12-19 06:21:48 【问题描述】:

以下代码创建 1. 树状图和 2. 带有树状图的热图

mydata <- mtcars
hclustfunc <- function(x) hclust(x, method="complete")
distfunc <- function(x) dist(x,method="euclidean")
d <- distfunc(mydata)
fit <- hclustfunc(d)

#plot dendogram only
plot(fit)
groups <- cutree(fit, k=5) 

# Add rectangle in cluster
rect.hclust(fit, k=5, border="red")

生成此图:

现在我想用树状图创建热图

# plot heat map with dendogram together.
library("gplots")
heatmap.2(as.matrix(mydata),dendrogram="row",trace="none", margin=c(8,9), hclust=hclustfunc,distfun=distfunc);

目前它看起来像这样:

在最终的热图中,有没有一种方法可以像第一个图一样为每个集群添加红色矩形(即添加到左侧的树状图上)?

【问题讨论】:

【参考方案1】:

我可以通过在heatmap.2 函数中使用RowSideColors 参数来提出替代方案吗:

heatmap.2(as.matrix(mydata),dendrogram="row",trace="none", margin=c(8,9), 
         hclust=hclustfunc, distfun=distfunc, RowSideColors=as.character(groups))

如果您想重新分配颜色:

# require(RColorBrewer)
cols <- brewer.pal(max(groups), "Set1")
heatmap.2(as.matrix(mydata),dendrogram="row",trace="none", margin=c(8,9), 
         hclust=hclustfunc, distfun=distfunc, RowSideColors=cols[groups])

第一个例子如下所示:

【讨论】:

【参考方案2】:

我破解了 heatmap.2 并添加了以下行:

cluster <- cutree(hcr, k=kcluster) 
clustab <- table(cluster)[unique(cluster[hcr$order])]
m <- c(0, cumsum(clustab))
which <- 1L:kcluster
border <- rep_len(border, length(which))
for (n in seq_along(which))
   rect(par("usr")[2L]+10,m[which[n]] + 0.66, 
    mean(rev(hcr$height)[(kcluster - 1):kcluster]),
    m[which[n] + 1] + 0.33, 
    border = border[n])

在这一行之后:

plot(ddr, horiz = TRUE, axes = FALSE, yaxs = "i", leaflab = "none")

你可以在这个gist找到新功能的代码。

例子:

heatmap.rect(as.matrix(mydata),
             dendrogram="row",trace="none", margin=c(8,9), 
             hclust=hclustfunc,distfun=distfunc,key=FALSE,
             kcluster=7,border='blue')

【讨论】:

【参考方案3】:

您可以根据聚类而不是聚类矩形为树状图着色。它看起来很乱。 R 中的“fheatmap”包提供了选择自定义颜色面板等进行着色的选项。

该软件包及其文档可在以下位置获得 http://cran.r-project.org/web/packages/fheatmap/index.html

【讨论】:

以上是关于如何在分层热图树状图中添加聚类矩形的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB | 绘图复刻 | 分层聚类分析图:树状图+热图

R语言绘图——层次聚类图及树状图添加side bar

绘制聚类热图(带树状图)/Python

如何在 scipy 创建的树状图中获得与颜色簇相对应的平面聚类

如何在 R 树状图中正确着色边缘或绘制矩形?

R 中热图/聚类默认值的差异(热图与热图.2)?