在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
相关产品推荐
相关产品推荐

