You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

hclust转dendrogram绘图节点顺序不一致的原因及解决方法

问题描述

我手动创建了一个名为hc1a的hclust对象,代码如下:

# Create hc1a and plot
hc1a <- list()
hc1a$merge <- matrix(c(-8, -9,
                      -1, -2,
                      -5,  1,
                      -7,  2,
                      -3,  4,
                       3,  5,
                      -4,  6,
                      -6,  7), ncol = 2, byrow = T)
hc1a$height <- c(0.01333333, 0.02000000, 0.03833333, 0.05500000, 0.06888889, 0.10555556, 0.13285714, 0.19625000)
hc1a$order <- c(4, 3, 2, 1, 7, 5, 9, 8, 6)           
hc1a$labels <- c(4136, 4137, 4139, 4141, 4292, 4302, 4303, 4305, 4306)
class(hc1a) <- "hclust" 
plot(hc1a)

# Convert hc1a to a dendrogram object and plot    
dend <- as.dendrogram(hc1a)
plot(dend)

转换为dendrogram对象并绘图后,发现两张图的节点顺序不一致,验证结果如下:

> order.dendrogram(dend)
[1] 6 4 5 8 9 3 7 1 2
> labels(dend)
[1] 4302 4141 4292 4305 4306 4139 4303 4136 4137
> 
> hc1a$order
[1] 4 3 2 1 7 5 9 8 6
> hc1a$labels
[1] 4136 4137 4139 4141 4292 4302 4303 4305 4306

我想了解:

  1. 为何转换后节点顺序和标签均发生变化?
  2. 如何绘制dendrogram对象,使其与plot(hc1a)的结构完全一致(即相同节点顺序、标签及树形)?

原因分析

  1. hclust的order属性作用:hc1a$order是hclust对象专门用于定义绘图时叶子节点显示顺序的属性,plot(hc1a)会直接遵循该顺序排列叶子,完全忽略合并矩阵中可能存在的子节点顺序差异。
  2. as.dendrogram()的默认行为:转换时,函数会自动对每个内部节点的子节点进行排序(默认按子节点包含的叶子索引升序排列),而非严格遵循hc1a$merge中的原始合并顺序,也不会自动继承hc1a$order的叶子排列规则。
  3. 标签顺序的差异来源:labels(dend)的结果是按dendrogram对象的叶子遍历顺序生成的,自然与hc1a$labels[hc1a$order](即plot(hc1a)的标签顺序)不一致。

解决方法

要让dendrogram的绘图与plot(hc1a)完全一致,需要根据hc1a$order重新排序dendrogram的叶子节点,使用reorder()函数即可实现:

# 根据hc1a$order重新排序dendrogram
dend_aligned <- reorder(dend, w = match(seq_along(hc1a$labels), hc1a$order))

# 绘制对齐后的树状图
plot(dend_aligned)

# 验证顺序一致性
# 检查标签顺序是否与plot(hc1a)一致
all(labels(dend_aligned) == hc1a$labels[hc1a$order])
# 检查叶子索引顺序是否匹配
all(order.dendrogram(dend_aligned) == hc1a$order)

原理说明

match(seq_along(hc1a$labels), hc1a$order)生成了一个权重向量,用于告诉reorder()函数将叶子节点调整为hc1a$order指定的顺序。执行后,dend_aligned的树形结构、叶子顺序和标签排列都会与plot(hc1a)完全一致。


内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 16:22:43