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

