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

在R中用pheatmap实现分组聚类?还是改用ComplexHeatmap?

用pheatmap实现分组聚类热图及包选择建议

一、用pheatmap实现分组聚类热图

完全可以用pheatmap实现类似的分组聚类热图效果,核心是通过annotation_row添加分组注释,结合聚类树切割或强制间隙来区分分组。以下是对应mtcars数据集的示例:

基础分组聚类实现

if (!require("pheatmap")) install.packages("pheatmap")
library(pheatmap)

# 标准化数据
df <- scale(mtcars)

# 创建行分组注释
row_annot <- data.frame(
  汽缸数 = factor(mtcars$cyl),
  变速箱 = factor(mtcars$am, labels = c("自动", "手动"))
)

# 绘制按变速箱分组的聚类热图
pheatmap(df,
         annotation_row = row_annot,  # 添加分组注释栏
         cutree_rows = length(unique(mtcars$am)),  # 按变速箱分组切割聚类树
         show_rownames = TRUE,
         fontsize_row = 7,
         main = "mtcars按变速箱分组聚类热图"
)

强制分组拆分(不依赖聚类结果)

如果需要严格按指定分组拆分而非依赖聚类树,可以先排序数据,再用gaps_row添加分组间隙:

# 按变速箱分组排序数据
df_sorted <- df[order(mtcars$am), ]
row_annot_sorted <- row_annot[order(mtcars$am), ]

# 计算分组间隙位置
gap_pos <- cumsum(table(mtcars$am))[-length(table(mtcars$am))]

pheatmap(df_sorted,
         annotation_row = row_annot_sorted,
         gaps_row = gap_pos,  # 添加分组间的空白间隙
         show_rownames = TRUE,
         fontsize_row = 7,
         main = "mtcars按变速箱强制分组热图"
)

二、pheatmap vs ComplexHeatmap:选择建议

  • 常规简单需求选pheatmap:语法简洁、上手快,能快速生成带基础分组注释、聚类拆分的热图,满足大多数日常分析场景。
  • 复杂定制需求选ComplexHeatmap:功能远更强大,支持多层嵌套分组、自定义注释图形、多热图组合、灵活的聚类规则等高级功能,适合多组学整合、复杂分组展示等专业可视化场景——你提供的示例中直接用split参数实现多维度分组,就是其便捷性的体现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:33:27