执行双聚类(行和列)后如何在 heatmap.2 上添加 ColSideColors

Posted

技术标签:

【中文标题】执行双聚类(行和列)后如何在 heatmap.2 上添加 ColSideColors【英文标题】:How to add ColSideColors on heatmap.2 after performing bi-clustering (row and column) 【发布时间】:2014-04-12 06:39:59 【问题描述】:

我有以下代码:

library(gplots)
library(RColorBrewer);

setwd("~/Desktop")
mydata <- mtcars
hclustfunc <- function(x) hclust(x, method="complete")
distfunc <- function(x) dist(x,method="euclidean")

d <- distfunc(mydata)
fit <- hclustfunc(d)
clusters <- cutree(fit, h=100)
nofclust.height <-  length(unique(as.vector(clusters)));

# Colorings
hmcols <- rev(redgreen(2750))
selcol <- colorRampPalette(brewer.pal(12,"Set3"))
selcol2 <- colorRampPalette(brewer.pal(9,"Set1"))
clustcol.height = selcol2(nofclust.height);

heatmap.2(as.matrix(mydata), 
           trace='none', 
           dendrogram='both', 
           key=F,
           Colv=T, 
           scale='row',
           hclust=hclustfunc, distfun=distfunc, col=hmcols,
           symbreak=T,
           margins=c(7,10), keysize=0.1,
           lwid=c(5,0.5,3), lhei=c(0.05,0.5),
           lmat=rbind(c(5,0,4),c(3,1,2)),
           labRow=rownames(mydata),
           #ColSideColors=clustcol.height[clusters],  # This line doesn't work
           RowSideColors=clustcol.height[clusters])

产生下图:

我想要做的是在行和列上执行聚类,并在树状图旁边显示聚类条(RowSideColors 和 ColSideColors)。我怎样才能做到这一点?

目前我只成功展示了RowSideColors 但没有显示ColSideColors 之一。

【问题讨论】:

【参考方案1】:

为了同时显示RowSideColorsColSideColors,您必须分别获取矩阵行和列的聚类分配。目前,对象“集群”包含仅对应于行的集群。

# set the custom distance and clustering functions, per your example
hclustfunc <- function(x) hclust(x, method="complete")
distfunc <- function(x) dist(x, method="euclidean")

# perform clustering on rows and columns
cl.row <- hclustfunc(distfunc(mydata))
cl.col <- hclustfunc(distfunc(t(mydata)))

# extract cluster assignments; i.e. k=8 (rows) k=5 (columns)
gr.row <- cutree(cl.row, 8)
gr.col <- cutree(cl.col, 5)

# require(RColorBrewer)
col1 <- brewer.pal(8, "Set1")
col2 <- brewer.pal(5, "Pastel1")

# require(gplots)    
heatmap.2(as.matrix(mydata), hclustfun=hclustfunc, distfun=distfunc,   
          RowSideColors=col1[gr.row], ColSideColors=col2[gr.col])

您可以使用plot(cl.row)plot(cl.col) 检查聚类先验。您也可以使用RColorBrewer 库来选择最合适的颜色编码。顺序调色板可能会更好地避免过度着色。

【讨论】:

以上是关于执行双聚类(行和列)后如何在 heatmap.2 上添加 ColSideColors的主要内容,如果未能解决你的问题,请参考以下文章

QUBIC 双聚类学习以及代码编写运行

excel怎么进行行列转换,excel如何转换行和列

绘制二维矩阵的行和列

重新排序矩阵元素以反映朴素python中的列和行聚类

Snapde怎么添加行和列

Scikit-learn 凝聚聚类连接矩阵