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

如何保持行列顺序绘制符合预期的基因表达z-score热图?

解决heatmap()生成符合PAM聚类分组热图的问题

问题出在heatmap()默认会对行进行聚类,即便你设置了cluster_columns=FALSE,行的顺序还是会被内置的聚类算法打乱,和你的PAM聚类结果不匹配。要生成和示例一致的热图,需要手动按PAM聚类结果排序行,并关闭行聚类功能,具体步骤如下:

1. 预处理数据

首先把表达数据和PAM聚类结果分离,确保表达矩阵是纯数值类型,同时将基因名称设为行名(如果还没设置的话):

# 假设你的数据框名为df,基因名称在第一列,最后一列是PAM_cluster
rownames(df) <- df[, 1]  # 将基因名称设为行名
expr_data <- df[, -c(1, ncol(df))]  # 提取表达数据(去掉基因名和聚类列)
pam_clusters <- df$PAM_cluster  # 提取PAM聚类结果

2. 按PAM聚类结果排序行

把同一聚类组的基因放在一起,确保热图的行顺序和你的聚类结果一致:

# 按聚类标签排序行索引
sorted_row_idx <- order(pam_clusters)
# 生成排序后的表达矩阵
sorted_expr_mat <- as.matrix(expr_data[sorted_row_idx, ])

3. 绘制符合要求的热图

调用heatmap()时,关闭行、列的自动聚类(Rowv=NA和Colv=NA),同时可以添加行侧颜色条标记聚类分组:

# 定义z-score对应的颜色映射(蓝色负、红色正)
z_color_palette <- colorRampPalette(c("darkblue", "white", "darkred"))(100)

# 为不同聚类组分配颜色(根据你的聚类数量调整颜色数量)
cluster_color_map <- c("#1b9e77", "#d95f02", "#7570b3")[pam_clusters[sorted_row_idx]]

# 绘制热图
heatmap(sorted_expr_mat,
        Rowv = NA,  # 关闭行聚类,保持自定义排序
        Colv = NA,  # 关闭列聚类
        scale = "none",  # 数据已是z-score,无需再缩放
        col = z_color_palette,
        RowSideColors = cluster_color_map,  # 行侧添加聚类分组颜色条
        margins = c(12, 10),  # 调整边距避免标签截断
        xlab = "组织样本",
        ylab = "基因名称")

关键说明

  • Rowv=NA是核心:这个参数会禁用heatmap()的行自动聚类,强制使用你预先排序好的行顺序,这也是你之前设置cluster_columns=FALSE但结果不符的原因——只关了列聚类,行聚类还在生效。
  • 如果需要更灵活的注释(比如列注释、更美观的颜色条),可以改用gplots包的heatmap.2()函数,它支持更多自定义选项,但上述基础方法已经能满足你的核心需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:40:54