首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hclust()和cutree...how在单个hclust()中绘制cutree()集群

hclust()和cutree...how在单个hclust()中绘制cutree()集群
EN

Stack Overflow用户
提问于 2016-01-22 22:05:40
回答 1查看 12.1K关注 0票数 3

我使用cutree()将我的hclust()树聚类到几个组中。现在我想要一个函数来hclust()几个组成员作为hclust()...另外:

我把一棵树分成168组,我想要168棵hclust()树...我的数据是一个1600*1600矩阵。

我的数据太大了,所以我给你举个例子

代码语言:javascript
复制
m<-matrix(1:1600,nrow=40)
#m<-as.matrix(m) // I know it isn't necessary here
m_dist<-as.dist(m,diag = FALSE )


m_hclust<-hclust(m_dist, method= "average")
plot(m_hclust)

groups<- cutree(m_hclust, k=18)

现在我想画出18棵树。一组一棵树。我试过很多次..。

EN

回答 1

Stack Overflow用户

发布于 2016-01-23 12:19:02

我首先警告你,对于这么大的树,可能大多数解决方案运行起来都有点慢。但这里有一个解决方案(使用dendextend R包):

代码语言:javascript
复制
m<-matrix(1:1600,nrow=40)
#m<-as.matrix(m) // I know it isn't necessary here
m_dist<-as.dist(m,diag = FALSE )
m_hclust<-hclust(m_dist, method= "complete")
plot(m_hclust)
groups <- cutree(m_hclust, k=18)

# Get dendextend
install.packages.2 <- function (pkg) if (!require(pkg)) install.packages(pkg);
install.packages.2('dendextend')
install.packages.2('colorspace')
library(dendextend)
library(colorspace)

# I'll do this to just 4 clusters for illustrative purposes
k <- 4
cols <- rainbow_hcl(k)
dend <- as.dendrogram(m_hclust)
dend <- color_branches(dend, k = k)
plot(dend)
labels_dend <- labels(dend)
groups <- cutree(dend, k=4, order_clusters_as_data = FALSE)
dends <- list()
for(i in 1:k) {
    labels_to_keep <- labels_dend[i != groups]
    dends[[i]] <- prune(dend, labels_to_keep)
}

par(mfrow = c(2,2))
for(i in 1:k) { 
    plot(dends[[i]], 
        main = paste0("Tree number ", i))
}
# p.s.: because we have 3 root only trees, they don't have color (due to a "missing feature" in the way R plots root only dendrograms)

让我们在一棵“更好”的树上再做一次:

代码语言:javascript
复制
m_dist<-dist(mtcars,diag = FALSE )
m_hclust<-hclust(m_dist, method= "complete")
plot(m_hclust)

# Get dendextend
install.packages.2 <- function (pkg) if (!require(pkg)) install.packages(pkg);
install.packages.2('dendextend')
install.packages.2('colorspace')
library(dendextend)
library(colorspace)

# I'll do this to just 4 clusters for illustrative purposes
k <- 4
cols <- rainbow_hcl(k)
dend <- as.dendrogram(m_hclust)
dend <- color_branches(dend, k = k)
plot(dend)
labels_dend <- labels(dend)
groups <- cutree(dend, k=4, order_clusters_as_data = FALSE)
dends <- list()
for(i in 1:k) {
    labels_to_keep <- labels_dend[i != groups]
    dends[[i]] <- prune(dend, labels_to_keep)
}

par(mfrow = c(2,2))
for(i in 1:k) { 
    plot(dends[[i]], 
        main = paste0("Tree number ", i))
}
# p.s.: because we have 3 root only trees, they don't have color (due to a "missing feature" in the way R plots root only dendrograms)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34948606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档