Base R绘制heatmap热图时如何自定义颜色刻度范围
Base R heatmap函数统一色阶范围解决方案
核心思路
Base R内置的heatmap()没有直接暴露色阶范围的调整参数,可通过自定义颜色映射断点的方式强制绑定色阶范围,实现两张热图的色阶统一。
具体实现步骤
- 第一步:预先定义全局统一的色阶范围、颜色序列和映射断点
# 设定统一色阶的上下限 min_range <- 0 max_range <- 4 # 定义渐变颜色的数量,数值越大渐变越平滑 color_num <- 100 # 生成配色,可替换为cm.colors、terrain.colors或RColorBrewer生成的配色向量 color_pal <- heat.colors(color_num) # 生成数值到颜色的映射断点,断点数量必须为颜色数量+1 color_breaks <- seq(min_range, max_range, length.out = color_num + 1)
- 第二步:调用
heatmap()时传入col和breaks参数即可
第一张热图(数据范围02,强制用04色阶)代码:
heatmap( as.matrix(data.frame(a=c(1,2),b=c(2,0))), scale = "none", col = color_pal, breaks = color_breaks, # 可选:关闭行列聚类,保证两张热图行列顺序一致方便对比 Rowv = NA, Colv = NA )
第二张热图(数据范围0~4)用完全相同的color_pal和color_breaks即可保证色阶完全对齐:
heatmap( as.matrix(data.frame(a=c(1,4),b=c(2,0))), scale = "none", col = color_pal, breaks = color_breaks, Rowv = NA, Colv = NA )
注意事项
- 如果你的数据存在超出
min_range/max_range的极值,可以将断点调整为color_breaks <- c(-Inf, seq(min_range, max_range, length.out = color_num -1), Inf),超出范围的数值会自动映射到最深/最浅的颜色 - 如果需要显示统一的色条图例,可以关闭
heatmap()默认的图例,自行调用fields::image.plot()在画布空白处添加全局统一的色条
内容的提问来源于stack exchange,提问作者doXa77o
相关产品推荐
相关产品推荐

