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

基于PCA的HCPC树状图与聚类分析结果为何存在差异?

层次聚类树状图与散点聚类结果不一致的问题

我有34个样地的7变量数据,希望通过聚类分析划分亚组。先完成主成分分析(PCA),再基于主成分开展层次聚类,但生成的树状图与聚类散点图分组结果存在差异——例如树状图中第3类包含4个样地,而聚类分析结果里第3类有6个样地,我原本预期两者完全一致。

聚类结果对比图


用到的R代码

加载依赖包

library(vegan)
library(writexl)
library(corrplot)
library(ggplot2)
library(ggrepel)
library(RColorBrewer)
library(devtools)
devtools::install_github("cmartin/ggConvexHull")
library(factoextra)
library(FactoMineR)
library(ggConvexHull)
library(dplyr)
library(tidyverse)
library(RColorBrewer)
library(viridis)

数据导入与分析流程

# 读取数据
Cluster <- read.csv('Data.csv', sep = ';')

# 执行PCA,保留4个主成分
res.pca <- PCA(Cluster, scale.unit = TRUE, ncp = 4, graph = FALSE)

# 基于PCA结果做层次聚类
res.hcpc <- HCPC(res.pca, graph = F)

可视化代码

# 绘制树状图
factoextra::fviz_dend(res.hcpc, 
                      cex = 0.7,   # 标签大小
                      palette = c("gold1", "chartreuse4","sienna3"), 
                      show_labels = T,
                      rect = TRUE, rect_fill = TRUE, # 为分组添加矩形框
                      rect_border = c("gold1", "chartreuse4","sienna3"),     # 矩形框颜色
                      labels_track_height = 0.8,     # 增加标签空间
                      )
# 绘制聚类散点图
fviz_cluster(res.hcpc,
             #repel = TRUE,            # 避免标签重叠
             show.clust.cent = TRUE,   # 显示聚类中心
             geom = c("point", "text"),
             #palette = "jco",
             palette = c("gold1","sienna3", "chartreuse4"), 
             ggtheme = theme_minimal(),
            )

问题原因与解决办法

核心原因

  1. 调色板顺序不匹配:你在fviz_dend和fviz_cluster中使用的调色板顺序不一致,这会直接导致颜色对应的分组错位,误以为分组数量不同。
  2. 聚类维度差异:HCPC()默认基于所有主成分构建层次聚类树,但fviz_cluster仅展示前2个主成分空间下的分组;同时函数内部可能会对层次聚类结果做微调,以优化低维空间内的分组紧凑性,最终导致两个图的显示差异。

解决步骤

  1. 统一调色板顺序:将两个可视化函数的palette参数设置为完全一致的顺序,比如都用c("gold1", "chartreuse4","sienna3"),先排除颜色错位导致的误解。
  2. 固定聚类数量:调用HCPC()时指定nb.clust参数固定聚类数,例如res.hcpc <- HCPC(res.pca, graph = F, nb.clust = 3),避免函数自动调整分组。
  3. 对齐聚类维度:用fviz_dend时指定axes参数,让树状图基于前两个主成分的聚类结果,例如fviz_dend(res.hcpc, axes = c(1,2), ...),确保与散点图的维度一致。
  4. 查看原始聚类结果:直接查看res.hcpc$data.clust,这里存储了每个样地的最终分组标签,对比这个结果和两个图的显示,就能快速定位问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:05:22