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

如何在R中使用daisy(gower)绘制样本vs特征聚类热图

基于Gower距离用pheatmap绘制混合类型数据热图的实现方法

你计算得到的gower_dist是n×n的样本间相异度矩阵。要绘制样本对应特征的热图,需要以适配Gower度量逻辑归一化后的原始特征矩阵为绘制基底,样本聚类时指定用预先计算的Gower距离即可,具体实现步骤如下:

  • 第一步:环境与数据准备
    你需要提前安装并加载cluster、pheatmap、scales三个包,其中scales用于特征归一化,保证热图的数值展示和Gower距离的计算逻辑一致。

  • 第二步:特征归一化处理
    Gower距离计算时会自动对不同类型特征做尺度统一:连续型变量做min-max归一化到0-1区间,二分类/分类变量转0-1编码,因此你需要先对原始数据集做相同逻辑的归一化,保证热图颜色深浅可以对应特征的实际贡献。

  • 第三步:绘制热图
    完整可运行代码如下:

# 加载依赖包
library(cluster)
library(pheatmap)
library(scales)

# 加载示例数据集
data(agriculture)
raw_df <- agriculture

# 按Gower距离的计算逻辑对所有特征做归一化
normalized_df <- as.data.frame(lapply(raw_df, function(col) {
  # 连续型特征做min-max归一化到0-1区间
  if (is.numeric(col)) {
    return(rescale(col, to = c(0, 1)))
  }
  # 分类/二分类特征转为0-1数值编码
  else {
    return(as.numeric(factor(col)) - 1)
  }
}))

# 计算样本间Gower距离
gower_dist <- daisy(raw_df, metric = "gower")
# 计算特征间的距离(已归一化可用欧氏距离)
feature_dist <- dist(t(normalized_df), method = "euclidean")

# 绘制样本×特征的探索性热图
pheatmap(
  mat = normalized_df,
  clustering_distance_rows = gower_dist, # 样本聚类使用预先计算的Gower距离
  clustering_distance_cols = feature_dist, # 特征聚类使用归一化后的欧氏距离
  show_rownames = TRUE,
  show_colnames = TRUE,
  main = "混合类型数据探索性热图(Gower距离聚类)",
  color = colorRampPalette(c("#2166AC", "#FFFFFF", "#B2182B"))(100) # 蓝白红渐变配色
)

如果需要绘制样本间相似度热图(即样本×样本的矩阵,颜色越深代表样本越相似),可使用以下代码:

# 将dist类型的相异度矩阵转为普通矩阵,并转为相似度矩阵(值越高越相似)
gower_similarity <- 1 - as.matrix(gower_dist)

pheatmap(
  mat = gower_similarity,
  clustering_distance_rows = gower_dist,
  clustering_distance_cols = gower_dist,
  main = "样本间Gower相似度热图",
  color = colorRampPalette(c("#FFFFFF", "#B2182B"))(100),
  show_rownames = TRUE,
  show_colnames = TRUE
)

注意事项

  • 如果你的数据集包含有序分类变量,可在daisy函数中添加type = list(order = c("你的有序分类列名"))参数,保证距离计算逻辑正确,归一化时也会自动保留等级顺序。
  • 如果不需要对特征做聚类,可在pheatmap参数中添加cluster_cols = FALSE关闭列聚类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:27:02