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

