使用R为指定数据框绘制自定义参数红色渐变分组热图
R语言自定义红色系分组热图实现方案
以下代码基于pheatmap包实现所有需求,适配提供的数据结构,全量数据直接替换输入部分即可运行。
依赖包安装与加载
未安装相关包先运行安装命令,再加载包:
install.packages(c("pheatmap", "dplyr")) library(pheatmap) library(dplyr)
数据预处理与分组配置
首先将数据转换为热图要求的矩阵格式,行对应Y轴代谢物差异指标,列对应X轴营养物指标,同时配置Y轴的亚组分组规则:
# 载入示例数据,实际使用时替换为读取自己全量数据的代码即可 df <- data.str # 矩阵转置适配轴映射规则:行=代谢物差异指标(Y轴),列=营养物(X轴) heatmap_mat <- df %>% tibble::column_to_rownames("Metabolite") %>% t() %>% as.matrix() # Y轴亚组配置,可根据实际分类需求修改规则 # 示例规则:含脂蛋白相关关键词的变量归为脂质组,其余按需求划分为比值组、酮体组 y_subgroup <- data.frame( row.names = rownames(heatmap_mat), 亚组 = case_when( grepl("HDL|LDL|IDL|TG|CE|FC|PL", rownames(heatmap_mat)) ~ "脂质组", rownames(heatmap_mat) %in% c("Difference_Gln", "Difference_Pyruvate", "Difference_S_HDL_C_pct") ~ "比值组", TRUE ~ "酮体组" ) )
配色与标注规则设置
按照要求配置红色系渐变色、固定色阶范围,同时生成仅显示大于5数值的标注矩阵:
# 生成从浅到深的红色系渐变色,数值越高颜色越深 red_pal <- colorRampPalette(c("#fff0f0", "#ffbdbd", "#ff6363", "#d10000", "#5c0000"))(100) # 设置色阶范围为-2到40 color_breaks <- seq(-2, 40, length.out = 101) # 生成单元格标注矩阵:仅保留数值>5的内容,其余单元格留空 cell_labels <- matrix( "", nrow = nrow(heatmap_mat), ncol = ncol(heatmap_mat), dimnames = dimnames(heatmap_mat) ) cell_labels[heatmap_mat > 5] <- round(heatmap_mat[heatmap_mat > 5], 2) # 标注保留2位小数,可自行调整
热图绘制
运行以下代码直接出图,可根据显示效果调整字号、角度等参数:
pheatmap( mat = heatmap_mat, color = red_pal, breaks = color_breaks, # Y轴亚组注释 annotation_row = y_subgroup, # 单元格数值标注 display_numbers = cell_labels, number_color = "white", # 标注文字用白色,保证深色背景上可读性 # 聚类与轴配置 cluster_rows = FALSE, # 若需要Y轴自动聚类排序可改为TRUE cluster_cols = FALSE, angle_col = 45, # X轴标签旋转45度避免重叠 fontsize_row = 10, fontsize_col = 10, fontsize_number = 8, # 样式调整 border_color = "white", legend_breaks = seq(-2, 40, 10) )
配置说明:如果需要调整亚组分类,直接修改
y_subgroup里的分组映射规则即可,支持任意数量的亚组;如果需要调整色阶范围、标注精度、字体大小,直接修改对应参数的取值即可。
内容的提问来源于stack exchange,提问作者Ram6
相关产品推荐
相关产品推荐

