在转录组 Bulk 测序数据分析中,热图是展示基因表达模式、样本聚类关系的核心可视化工具。一张高质量的热图不仅能清晰呈现数据特征,更能提升研究成果的展示效果。本文基于 R 语言的pheatmap
包,整理了六种适用于不同场景的热图绘制方法,涵盖基础聚类、分组对比、通路注释等需求,私信即可获取全部代码,方便科研人员快速实现数据可视化。
一、绘图前的数据准备
热图绘制的核心是基因表达矩阵,数据格式的规范性直接影响后续分析效果,需提前做好以下准备:
1.1 表达矩阵格式要求
表达矩阵需满足:
- 第一列为基因名(后续将作为行名);
- 从第二列开始为样本的基因表达值(FPKM、TPM 或 Counts 均可);
- 第一行为样本名称(作为列名)。
示例格式如下(简化版):
GeneSymbol | Sample1 | Sample2 | ... | Sample60 |
---|---|---|---|---|
GeneA | 12.3 | 15.6 | ... | 8.9 |
GeneB | 3.2 | 2.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")
)
特点:左侧添加通路注释条,可观察同一通路基因的表达模式一致性。
三、注意事项与优化建议
数据预处理:热图对异常值敏感,建议先通过
scale
参数(行 / 列标准化)消除量纲影响,或对表达矩阵进行 log2 转换(若数据未标准化)。参数调整:
show_rownames/show_colnames
:基因 / 样本数量过多时建议设为FALSE
,避免标签重叠;treeheight_row/treeheight_col
:调整聚类树高度,减少冗余空间;fontsize
:调整标签字体大小,优化可读性。
图片保存:通过
filename
参数保存高清图片:pheatmap(..., filename = "heatmap.png", width = 10, height = 8, dpi = 300)
以上六种热图覆盖了转录组数据分析中常见的可视化需求,可根据实际数据特点(如基因数量、分组类型)选择合适的方法。代码中涉及的参数可根据具体需求进一步调整,若有疑问或优化建议,欢迎留言交流。