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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:15:43