对于基因的差异表达谱,常用热图作为展示。但有时差异基因可能非常的多,热图中不可能将所有基因的名称标注出来。那么此时不妨选择一些比较重要的基因(比方说p值最显著的那些),在图中指示它们的位置。
我们来看这篇文献“Transcriptome Profiling of Adipose Tissue Reveals Depot-Specific Metabolic Alterations Among Patients with Colorectal Cancer”中,是怎样展示热图的。文中比较了结直肠癌患者的内脏脂肪组织(VAT)和皮下脂肪组织(SAT)的转录组谱,将差异表达的基因展示为热图。热图整体结构在标注了部分基因后,并未显得凌乱,同时还能告知读者哪些基因是重要的,必要时还可仔细比较它们的表达值,是种不错的表现方法。
图1,(a)VAT和SAT之间差异表达基因的热图。
准备作图文件
接下来,就让小编带大家了解怎样在R中绘制这种只标识重要基因的热图。
示例数据和R代码等,可点击这里获取。
为了绘制这种热图,首先要准备两类数据。
(1)基因表达矩阵,行是基因,列是样本,表达值可以是FPKM或者log转化后的表达值等都可以。
(2)基因名称列表,将待标识的重要基因名称以一排的形式放在一个列表中。
R包ComplexHeatmap的热图绘制
随后,将上述两个数据导入R中,绘制热图。
首先读取基因表达值矩阵,绘制一个常规的无基因名称的热图。
#读取的示例文件
#gene.txt是基因表达值矩阵
#name.txt是带展示名称的基因列表
#加载ComplexHeatmap包绘制这种类型的热图
library(ComplexHeatmap)
#表达矩阵,考虑到ComplexHeatmap没有scale参数,因此需事先手动做个行标准化
mat <- read.delim('gene.txt', row.names = 1, check.names = FALSE)
for (i in 1:nrow(mat)) mat[i, ] <- scale(log(unlist(mat[i, ]) + 1, 2))
mat <- as.matrix(mat)
#定义样本分组,例如示例文件中共 A、B、C 3组
samples <- rep(c('A', 'B', 'C'), c(3, 3, 3))
#先绘制一个不显示任何基因名称的热图
heat <- Heatmap(mat,
col = colorRampPalette(c('green', 'black', 'red'))(100), #定义热图由低值到高值的渐变颜色
heatmap_legend_param = list(grid_height = unit(10,'mm')), #图例高度设置
show_row_names = FALSE, #不展示基因名称
top_annotation = HeatmapAnnotation(Group = samples,
simple_anno_size = unit(2, 'mm'),
col = list(Group = c('A' = '#00DAE0', 'B' = '#FF9289', 'C' = 'blue')), #定义样本分组的颜色
show_annotation_name = FALSE),
column_names_gp = gpar(fontsize = 10), row_names_gp = gpar(fontsize = 6))
heat
随后,将重要的待展示名称的基因名称列表读入到R中,并添加在热图右侧显示出。
#读取待展示的基因名称,并添加到热图中
name <- read.delim('name.txt', header = FALSE, check.names = FALSE)
heat + rowAnnotation(link = anno_mark(at = which(rownames(mat) %in% name$V1),
labels = name$V1, labels_gp = gpar(fontsize = 10)))
这就搞定了,是不是非常简单实用呢?