在热图中标注出特定基因的名称

对于基因的差异表达谱,常用热图作为展示。但有时差异基因可能非常的多,热图中不可能将所有基因的名称标注出来。那么此时不妨选择一些比较重要的基因(比方说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)))
右侧标识重要基因的名称

这就搞定了,是不是非常简单实用呢?

你可能感兴趣的:(在热图中标注出特定基因的名称)