【问题标题】:Cutting a dendrogram in R在 R 中切割树状图
【发布时间】:2016-01-21 20:59:03
【问题描述】:

我正在尝试将此树状图分为 3 组:(T24、T1、T17 等)、(T12、T15、T6 等)和(T2、T8、T3、T9)

我尝试过使用 cutree(hc, k=3, h=400) ,但它继续创建相同的组。任何帮助是极大的赞赏。这是我的代码。

#temps must have date/time as column headers, not row headers
load(temps)
distMatrix <- dist(temps)
#create label colors
labelColors = c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00", "#FFFF33")
# cut dendrogram in 3 clusters
clusMember = cutree(hc, k=3, h=400)
colLab <- function(n) {
  if (is.leaf(n)) {
  a <- attributes(n)
  labCol <- labelColors[clusMember[which(names(clusMember) == a$label)]]
  attr(n, "nodePar") <- c(a$nodePar, lab.col = labCol)
  }
  n
}
hcd = as.dendrogram(hc)
clusDendro = dendrapply(hcd, colLab)
plot(clusDendro, main = "Cluster Analysis")

【问题讨论】:

  • 你不能*t,因为没有代表这三个组的高度(y轴)。
  • 你可以做一个较小的高度,然后自己组合组。 cuttree 的文档说,如果您指定 k 它会覆盖 h 如果两者都给出。

标签: r dendrogram dendextend


【解决方案1】:

从我们无权访问数据的意义上说,您的示例不可重现。 我能说的是你应该看看dendextend R package。它提供了切割树状图以及为标签和分支着色的功能。 Quick Introduction 手册显示了 labels_colorscolor_branches 等函数的基本用法,用于生成如下图:

在您的情况下,由于您的分支似乎处于相同的高度,因此您不太可能直接控制它们的切割。你可以做的是使用branches_attr_by_clusters 来专门控制你关心的子集群的颜色。这是一个例子:

x <- c(1:3, 6:8)
dend <- as.dendrogram(hclust(dist(x), method = "ave"))
library(dendextend)
labels(dend) <- x[order.dendrogram(dend)]

# due to the ties - there is specific reason to have this be these 3 clusters:
cutree(dend, k = 3)[order.dendrogram(dend)]

par(mfrow = c(1,2))
dend1 <- color_branches(dend, k = 3)
dend1 <- color_labels(dend1, k = 3)
plot(dend1, main = "default cuts by cutree")
# let's force it to be another 3 clusters:
dend2 <- branches_attr_by_clusters(dend, c(1, 2,2, 3,3,3), c("gold", "darkgreen", "blue"))
# coloring the labels is actually the easiest part:
labels_colors(dend2) <- c("gold", "darkgreen", "blue")[c(1, 2,2, 3,3,3)]
plot(dend2, main = "Manual cuts")

【讨论】:

  • 在此之后如何使用 color_branches 添加到 heatmap.2 ColSideColors?
  • 没关系的是labels_colors(dend2)[order(order.dendrogram(dend2))]
  • 我认为标签在labels(dend)中也需要是唯一的
  • 确认唯一或不必唯一,但手动中断的顺序正确。
猜你喜欢
  • 2017-04-27
  • 2019-07-07
  • 2014-07-31
  • 1970-01-01
  • 2013-11-13
  • 2014-04-14
  • 2016-07-31
  • 2013-08-08
  • 2014-10-16
相关资源
最近更新 更多