以下代码创建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);
目前它看起来像这样:
在最终的热图中有一种方法可以为每个簇添加红色矩形(即在左边的树形图上),就像第一个图一样?
答案 0 :(得分:7)
我可以在RowSideColors
函数中使用heatmap.2
参数建议替代方案:
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])
第一个例子如下所示:
答案 1 :(得分:4)
我入侵了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')
答案 2 :(得分:-1)
您可以根据群集而不是聚类矩形对树形图进行着色。它看起来很乱。 &#39; fheatmap&#39; R中的包提供了选择自定义颜色面板等进行着色的选项。
该软件包及其文档可在以下网站获得 http://cran.r-project.org/web/packages/fheatmap/index.html