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

调整pheatmap连续型图例:修正年龄注释图例范围错误

问题:pheatmap中连续型注释(年龄)的图例范围调整问题

在RNA-seq分析(基于DESeq2)流程中,使用pheatmap绘制热图并通过coldata元数据做列注释时,出现以下问题:

  • 热图顶部的年龄注释颜色条能正确匹配实际年龄值(范围0.6-9.8)
  • 但年龄注释的图例错误显示最小值为2、最大值为8,无法匹配真实数据范围
  • 尝试使用breaks和legend_breaks参数仅能修改热图自身的颜色梯度,无法调整附加注释的图例范围

解决方法

pheatmap对连续型注释的图例默认基于数据极值自动生成,要自定义范围需手动指定注释的颜色映射与断点:

1. 修改注释颜色配置

为连续型变量age创建覆盖目标范围(0-10)的颜色渐变与断点:

# 创建注释数据框
heat_anno <- as.data.frame(colData(vsd)[,c("age", "sex")])

# 生成年龄对应的渐变颜色(从蓝到红,覆盖0-10)
age_colors <- colorRampPalette(c("#4477AA", "#FFDD44", "#EE6677"))(100)
# 设置断点:从0到10,分成100个区间(对应100个色阶)
age_breaks <- seq(0, 10, length.out = 101)

# 整合注释颜色列表:包含分类变量sex和连续变量age的颜色规则
heat_colors <- list(
    sex = c("M" = "#01bfc5", "F" = "salmon"),
    age = age_colors
)

2. 绘制热图时应用自定义配置

在pheatmap函数中加入annotation_colors参数,指定自定义的注释颜色规则:

pheatmap(mat = assay(vsd[genes, ]),
    cluster_rows = TRUE,
    cluster_cols = FALSE,
    annotation_col = heat_anno,
    labels_col = coldata$age,
    annotation_colors = heat_colors, # 应用自定义注释颜色映射
    annotation_legend = TRUE # 确保注释图例正常显示
)

可选:自定义图例刻度

如果需要更清晰的整数刻度(如0、2、4、6、8、10),可以调整断点与色阶数量:

# 设置整数断点
age_breaks <- seq(0, 10, by = 2)
# 生成对应数量的渐变颜色(断点数量-1)
age_colors <- colorRampPalette(c("#4477AA", "#FFDD44", "#EE6677"))(length(age_breaks)-1)

# 重新整合颜色列表后再绘制热图即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:35:24