對于基因的差異表達譜,常用熱圖作為展示。但有時差異基因可能非常的多,熱圖中不可能將所有基因的名稱標(biāo)注出來。那么此時不妨選擇一些比較重要的基因(比方說p值最顯著的那些),在圖中指示它們的位置。
我們來看這篇文獻“Transcriptome Profiling of Adipose Tissue Reveals Depot-Specific Metabolic Alterations Among Patients with Colorectal Cancer”中,是怎樣展示熱圖的。文中比較了結(jié)直腸癌患者的內(nèi)臟脂肪組織(VAT)和皮下脂肪組織(SAT)的轉(zhuǎn)錄組譜,將差異表達的基因展示為熱圖。熱圖整體結(jié)構(gòu)在標(biāo)注了部分基因后,并未顯得凌亂,同時還能告知讀者哪些基因是重要的,必要時還可仔細比較它們的表達值,是種不錯的表現(xiàn)方法。

圖1,(a)VAT和SAT之間差異表達基因的熱圖。
準(zhǔn)備作圖文件
接下來,就讓小編帶大家了解怎樣在R中繪制這種只標(biāo)識重要基因的熱圖。
示例數(shù)據(jù)和R代碼等,可點擊這里獲取。
為了繪制這種熱圖,首先要準(zhǔn)備兩類數(shù)據(jù)。
(1)基因表達矩陣,行是基因,列是樣本,表達值可以是FPKM或者log轉(zhuǎn)化后的表達值等都可以。

(2)基因名稱列表,將待標(biāo)識的重要基因名稱以一排的形式放在一個列表中。

R包ComplexHeatmap的熱圖繪制
隨后,將上述兩個數(shù)據(jù)導(dǎo)入R中,繪制熱圖。
首先讀取基因表達值矩陣,繪制一個常規(guī)的無基因名稱的熱圖。
#讀取的示例文件
#gene.txt是基因表達值矩陣
#name.txt是帶展示名稱的基因列表
#加載ComplexHeatmap包繪制這種類型的熱圖
library(ComplexHeatmap)
#表達矩陣,考慮到ComplexHeatmap沒有scale參數(shù),因此需事先手動做個行標(biāo)準(zhǔn)化
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')), #圖例高度設(shè)置
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中,并添加在熱圖右側(cè)顯示出。
#讀取待展示的基因名稱,并添加到熱圖中
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)))

這就搞定了,是不是非常簡單實用呢?