r - hclust() 和 cutree ...如何在单个 hclust() 中绘制 cutree() 集群

标签 r hclust dendextend

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

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

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

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 棵树……一组一棵树。我已经尝试了很多..

最佳答案

我提前警告您,对于如此大的树,可能大多数解决方案运行起来都会有点慢。但这里有一个解决方案(使用 dendextend R 包):

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)

enter image description here

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

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)

enter image description here

关于r - hclust() 和 cutree ...如何在单个 hclust() 中绘制 cutree() 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34948606/

相关文章:

r - "Bin"ggplot2 中的连续值基于获得更清晰颜色的标准(如因子级别着色)?

r - 合并多个 hclust 对象(或树状图)

从 r 中的树状图中删除 x 轴标签

r - 具有层次聚类的堆积条形图(树状图)

R Shiny : Conditional panel based on row selected in datatable

r - 确定最大数量和最长时间间隔

R将树状图切割成最小尺寸的组

r - 如何通过 R 中的附加因子变量为树状图的标签着色

R 和 rect.hclust : rectangle on labels in dendrograms

c++ - C/C++ 代码中函数的多重定义