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

R语言热图单元格排序与0-1数据集自定义整行颜色设置问题

实现方案

R基础heatmap()函数自定义程度较低,推荐使用pheatmap包实现你的需求,完整可运行代码如下:

1. 安装加载依赖包

# 首次使用先安装
install.packages("pheatmap")
library(pheatmap)

2. 数据排序(按需调整排序规则)

示例按每行第一个取值为1的列排序,方便查看分布规律:

# 自定义行排序规则
row_order <- order(apply(df, 1, function(x) which(x == 1)[1]), na.last = TRUE)
df_sorted <- df[row_order, ]

3. 配置行着色规则

# 行分组注释:前50行、后50行
row_anno <- data.frame(
  分组 = factor(c(rep("前50行", 50), rep("后50行", 50)), 
                levels = c("前50行", "后50行"))
)
# 分组对应的颜色
anno_col <- list(
  分组 = c("前50行" = "lightblue", "后50行" = "lightcoral")
)

4. 配置热图样式,实现1的阴影效果

# 热图颜色映射:0为白色,1为深灰色强化阴影效果
heat_col <- c("white", "gray40")
# 绘制热图
pheatmap(df_sorted,
         cluster_rows = FALSE, # 关闭行聚类,保留自定义排序
         cluster_cols = FALSE, # 关闭列聚类,保留Q1-Q10的原始顺序
         scale = "none", # 若需要保留原始的列标准化逻辑可改回 "column"
         color = heat_col,
         border_color = "black", # 单元格加边框,进一步强化1的阴影区分度
         annotation_row = row_anno, # 加载行背景着色配置
         annotation_colors = anno_col,
         show_rownames = FALSE, # 可按需开启显示行号
         show_colnames = TRUE
)

参数说明

  • 阴影效果:通过单元格黑色边框+1值的深灰色填充,和0值的白色背景形成明显的阴影区分,符合需求
  • 排序逻辑:提前对数据集完成自定义排序后关闭pheatmap的自动聚类功能,即可保留你需要的排序规则,可自行修改row_order的排序逻辑
  • 行着色:通过行注释功能实现前50行蓝色、后50行红色的整行背景区分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:45:01