当前位置: 首页 > web >正文

R 语言绘制六种精美热图:转录组数据可视化实践(基于 pheatmap 包)

在转录组 Bulk 测序数据分析中,热图是展示基因表达模式、样本聚类关系的核心可视化工具。一张高质量的热图不仅能清晰呈现数据特征,更能提升研究成果的展示效果。本文基于 R 语言的pheatmap包,整理了六种适用于不同场景的热图绘制方法,涵盖基础聚类、分组对比、通路注释等需求,私信即可获取全部代码,方便科研人员快速实现数据可视化。

一、绘图前的数据准备

热图绘制的核心是基因表达矩阵,数据格式的规范性直接影响后续分析效果,需提前做好以下准备:

1.1 表达矩阵格式要求

表达矩阵需满足:

  • 第一列为基因名(后续将作为行名);
  • 从第二列开始为样本的基因表达值(FPKM、TPM 或 Counts 均可);
  • 第一行为样本名称(作为列名)。

示例格式如下(简化版):

GeneSymbolSample1Sample2...Sample60
GeneA12.315.6...8.9
GeneB3.22.1...5.7

1.2 数据读取与预处理

使用read.csv函数读取数据,注意保留基因名作为行名,避免样本名被自动修改:

# 读取表达矩阵(替换为实际文件路径)
data <- read.csv("gene_expression_matrix.csv", row.names = 1, check.names = FALSE)
# check.names = FALSE:避免样本名中的特殊字符(如“-”“.”)被自动转换

1.3 样本分组注释

根据研究设计定义样本分组(如正常组 / 疾病组、处理组 / 对照组等),用于后续热图的分组标记:

# 示例:30个正常组样本 + 30个疾病组样本(需根据实际样本数量修改)
sample_groups <- data.frame(Condition = factor(c(rep("Normal", 30), rep("Disease", 30))),  # 分组名称row.names = colnames(data)  # 样本名与表达矩阵列名对应
)

二、六种热图绘制方法

2.1 经典聚类热图(部分代码)

适用场景:初步展示基因表达模式与样本聚类关系,适合探索性分析。

通过行(基因)标准化消除表达量量级差异,结合聚类树展示基因与样本的相似性:

library(pheatmap)
library(RColorBrewer)pheatmap(data,color = colorRampPalette(rev(brewer.pal(11, "RdBu")))(100),  # 红蓝渐变配色(表达量高→红,低→蓝)scale = "row",  # 按行(基因)标准化

特点:通过颜色梯度直观展示基因表达高低,聚类树反映样本 / 基因的相似性。

2.2 分组注释热图(部分代码)

适用场景:需突出样本分组信息(如正常 / 疾病、处理 / 对照),增强组间差异的可视化效果。

在经典热图基础上添加样本分组注释条,通过颜色区分不同组别:

# 定义分组注释颜色(可根据需求调整色值)
annotation_colors <- list(Condition = c(Normal = "#4DBBD5",  # 正常组:浅蓝色Disease = "#E64B35") # 疾病组:红色
)pheatmap(data,color = colorRampPalette(rev(brewer.pal(11, "RdBu")))(100),scale = "row",

特点:通过顶部注释条清晰区分样本组别,便于观察组内聚类一致性与组间差异。

2.3 二元对比热图(部分代码)

适用场景:需突出基因在两组间的表达差异(如上调 / 下调),适合差异基因集的可视化。

使用多色渐变(蓝→白→红)强化表达量极端值的对比:

pheatmap(data,color = colorRampPalette(c("#2c7bb6", "#abd9e9", "#ffffbf", "#fdae61", "#d7191c"))(100),# 颜色梯度:深蓝(低表达)→浅蓝→白→浅红→深红(高表达)scale = "row",annotation_col = sample_groups,

特点:中间白色为基线,两端颜色强化高低表达差异,适合直观展示基因在两组中的表达趋势。

2.4 子集热图(前 20 个基因)(部分代码)

适用场景:聚焦核心基因(如 top 差异基因、关键通路基因),避免全基因集热图的冗余。

对基因集进行筛选(如取前 20 个),简化热图复杂度:

library(viridis)  # 需提前安装:install.packages("viridis")# 取前20个基因(可替换为按表达量/差异倍数筛选的基因)
top20_data <- data[1:20, ]pheatmap(top20_data,color = viridis(100),  # 青绿色系渐变(美观且适合色盲友好)scale = "row",

特点:聚焦关键基因,减少视觉干扰,适合突出核心基因的表达模式。

2.5 相关系数热图(部分代码)

适用场景:分析样本间或基因间的表达相关性,探索数据内部关联性。

基于表达矩阵计算相关系数(如 Pearson),再绘制热图:

# 计算样本间相关系数矩阵(列之间的相关性)
cor_matrix <- cor(t(data))  # t()转置:样本为行,计算样本间相关pheatmap(cor_matrix,color = colorRampPalette(rev(brewer.pal(9, "YlOrRd")))(100),  # 黄→红:相关性从低到高

特点:颜色越深表示相关性越高,可用于验证样本重复性(组内样本相关性应高于组间)。

2.6 通路注释热图(部分代码)

适用场景:展示基因所属功能通路(如 KEGG、GO 通路),关联表达模式与生物学功能。

需提前定义基因 - 通路对应关系,添加行注释(通路信息):

# 定义基因通路
gene_groups <- data.frame(Pathway = factor(sample(c("Pathway A", "Pathway B", "Pathway C"), nrow(data), replace = TRUE)),row.names = rownames(data)  # 基因名与表达矩阵行名对应
)# 定义通路注释颜色
pathway_colors <- list(Pathway = c("Pathway A" = "#7FC97F", "Pathway B" = "#BEAED4", "Pathway C" = "#FDC086")
)

特点:左侧添加通路注释条,可观察同一通路基因的表达模式一致性。

三、注意事项与优化建议

  1. 数据预处理:热图对异常值敏感,建议先通过scale参数(行 / 列标准化)消除量纲影响,或对表达矩阵进行 log2 转换(若数据未标准化)。

  2. 参数调整

    • show_rownames/show_colnames:基因 / 样本数量过多时建议设为FALSE,避免标签重叠;
    • treeheight_row/treeheight_col:调整聚类树高度,减少冗余空间;
    • fontsize:调整标签字体大小,优化可读性。
  3. 图片保存:通过filename参数保存高清图片:

    pheatmap(..., filename = "heatmap.png", width = 10, height = 8, dpi = 300)
    

以上六种热图覆盖了转录组数据分析中常见的可视化需求,可根据实际数据特点(如基因数量、分组类型)选择合适的方法。代码中涉及的参数可根据具体需求进一步调整,若有疑问或优化建议,欢迎留言交流。

http://www.xdnf.cn/news/16343.html

相关文章:

  • Redis替代方案:腾讯云TDSQL-C内存优化实战,TPS秒上涨
  • 大语言模型生成式人工智能企业应用
  • 水库大坝安全监测的主要内容
  • 微算法科技(NASDAQ:MLGO)采用分布式哈希表优化区块链索引结构,提高区块链检索效率
  • mac下 vscode 运行 c++无法弹出窗口
  • 《C++初阶之STL》【vector容器:详解 + 实现】
  • 智能问答分类系统:基于SVM的用户意图识别
  • Android Paging 分页加载库详解与实践
  • 航段导航计算机 (Segment_Navigator) 设计与实现
  • 重构 MVC:让经典架构完美适配复杂智能系统的后端业务逻辑层(内附框架示例代码)
  • 【MacOS】发展历程
  • HTTP 请求方法有哪些?
  • 《基于电阻抗断层扫描(EIT)驱动的肌肉骨骼模型表征人体手臂动态意图用于人机交互》论文解读
  • 当人机交互迈向新纪元:脑机接口与AR/VR/MR的狂飙之路
  • Spring Cloud Gateway 服务网关
  • 2025年第四届创新杯(原钉钉杯)赛题浅析-助攻快速选题
  • Android Studio 2024 内嵌 Unity 3D 开发示例
  • 【第四章:大模型(LLM)】01.神经网络中的 NLP-(1)RNN、LSTM 和 GRU 的基本原理和应用
  • 全国产化5G-A低空经济基座
  • 【Unity笔记】OpenXR 之VR串流开发笔记:通过RenderTexture实现仅在PC端展示UI,在VR眼镜端隐藏UI
  • 大模型进阶面试题
  • 车载 CAN-Bus 数据记录仪说明书
  • 【C语言进阶】一篇文章教会你文件的读写
  • 【unitrix】 6.16 非负整数类型( TUnsigned )特质(t_unsingned.rs)
  • 电子电子架构 --- 软件项目的开端:裁剪
  • Java面试题(中等)
  • Javascript NaN Symbol BigInt
  • TDengine 转化类函数 CAST 用户手册
  • 7.24 C/C++蓝桥杯 | 排序算法
  • Android15或AndroidU广播的发送流程