如何在pheatmap()中以1为分界用不同颜色可视化数值
实现自定义分界的热图颜色渐变
要实现以1为分界的绿/红渐变热图,需要自定义pheatmap的颜色映射和断点设置,具体步骤如下:
1. 明确数据范围
先获取test数据框的极值,确定颜色渐变的两端边界:
min_val <- min(test) max_val <- max(test) mid_point <- 1 # 设定核心分界点
2. 生成自定义颜色调色板
分别创建小于1的绿色渐变(值越小,绿色越深)和大于1的红色渐变(值越大,红色越浓),再将两者拼接:
# 绿色系:深绿 -> 浅绿(趋近1) green_pal <- colorRampPalette(c("#006400", "#90EE90"))(100) # 红色系:浅红 -> 深红(远离1) red_pal <- colorRampPalette(c("#FFCCCB", "#DC143C"))(100) # 合并两个调色板 custom_colors <- c(green_pal, red_pal)
3. 设置断点(breaks)
断点要严格对应颜色的分段,确保1作为分界点:
# 小于1的部分:从最小值到1,分成100个区间(生成101个断点) breaks_green <- seq(min_val, mid_point, length.out = 101) # 大于1的部分:从1到最大值,分成100个区间,去掉重复的1 breaks_red <- seq(mid_point, max_val, length.out = 101)[-1] # 合并断点 custom_breaks <- c(breaks_green, breaks_red)
4. 绘制热图
将自定义的颜色和断点传入pheatmap:
pheatmap(test, cutree_rows = 1, color = custom_colors, breaks = custom_breaks)
这样就能实现需求效果:所有小于1的值随数值减小逐渐加深绿色,大于1的值随数值增大逐渐加深红色,1作为中间过渡点。
内容的提问来源于stack exchange,提问作者Lara
相关产品推荐
相关产品推荐

