You need to enable JavaScript to run this app. R中hclust绘制层次聚类树状图无法显示样本名称仅显示数字标识的问题
优惠活动
大模型
产品
解决方案
定价
更多

R中hclust绘制层次聚类树状图无法显示样本名称仅显示数字标识的问题

问题核心成因

从你提供的dput(head(df2))结果可以看到,你的数据框存在两个关键结构差异,直接导致了后续异常:

  1. 你把国家名称作为了数据框的第一列(且该列没有正式列名),而没有将国家名设置为数据框的行名:当前df2的行名是R默认生成的1、2、3...数字序列,这也是树状图只显示数字标签的根本原因。
  2. 因为把字符型的国家名放在了数据列里,dist()函数要求输入全为数值类型的数据集,因此计算距离时会尝试把字符列强制转成数值,触发了“NAs introduced by coercion”的警告。这种情况下算出的距离矩阵本身是无效的——字符列转NA后,欧氏距离计算会丢失对应维度的信息,得到的聚类结果并不具备参考性。

你观察到的USArrests能正常显示标签,本质是这个数据集的州名是存在行名属性里的,所有数据列都是纯数值,既不会触发距离计算警告,hclust也会自动提取行名作为树状图的节点标签。你看到的“右对齐/左对齐”只是R控制台打印数据框的格式差异,和功能逻辑没有关系。

修正操作步骤

  • 第一步:将存储国家名的第一列提取为数据框的行名,删除该非数值列
# 提取第一列的国家名设为行名
rownames(df2) <- df2[[1]]
# 移除原第一列的国家名,保留纯数值的统计列
df2 <- df2[, -1]
  • 第二步:验证数据结构是否符合计算要求
    运行rownames(df2),如果输出是各个国家名称而非1、2、3的数字序列,且所有列都是数值类型,说明结构修正完成。这时候再运行dist(df2)将不会出现之前的强制转换警告。
  • 第三步:重新执行层次聚类与绘图
d2 <- hclust(dist(df2))
plot(d2, hang = -1)

执行后树状图的叶子节点就会自动对应显示样本的国家名称,和USArrests的运行效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 08:36:03