最近休息了幾天。沒有來得及更新。今天我們來講一講熱圖怎么繪制
什么是熱圖(Heatmap)
熱圖是一個(gè)以顏色變化來顯示數(shù)據(jù)的矩陣。Toussaint Loua在1873年就曾使用過熱圖來繪制對(duì)巴黎各區(qū)的社會(huì)學(xué)統(tǒng)計(jì)。

生物學(xué)中熱圖經(jīng)常用于展示多個(gè)基因在不同樣本中的表達(dá)水平。然后可以通過聚類等方式查看不同組(如疾病組和對(duì)照組)特有的pattern。

如上圖每一列代表一個(gè)樣本(左側(cè)的樣本是Basal,右側(cè)的樣本是Luminal),每一行代表一個(gè)基因,顏色代表了表達(dá)量(這張圖沒有顯示圖例,不知道是偏綠還是偏紅代表高表達(dá)量)。可以看到這些挑選出的基因在兩組的表達(dá)有較大的差異,EN1、FOXC1這幾個(gè)基因在Basal組總體呈現(xiàn)紅色,在Luminal呈現(xiàn)綠色。而后面的幾個(gè)基因在Luminal總體呈現(xiàn)紅色,在Basal總體呈現(xiàn)綠色。而外面的樹狀圖形是對(duì)基因和樣本的聚類,通常聚類的結(jié)果把基因的表達(dá)量相似的聚在一起,把基因表達(dá)的pattern相似的樣本聚在一起。所以在該圖中可以看到Basal的樣本都聚在了一起,Luminal 的樣本也都聚在了一起。通常如果兩組的差異較明顯,組內(nèi)的pattern較為相似,就能有這樣的聚類結(jié)果——一個(gè)組的樣本聚類在一起。相反如果是差異較小的兩組樣本,就很可能混在一起。
熱圖還可以用于展示其他物質(zhì)的豐度比如微生物的相對(duì)豐度、代謝組不同物質(zhì)的含量等等。當(dāng)然,另一個(gè)熱圖的重要用處就是展現(xiàn)不同指標(biāo)、不同樣本等之間的相關(guān)性。

此時(shí)顏色代表的就是相關(guān)系數(shù)的大小。所以可以看到自己和自己的相關(guān)系數(shù)是1,也就是最深的藍(lán)色。約接近白色說明相關(guān)性越弱,偏藍(lán)(正相關(guān))或者偏紅(負(fù)相關(guān))則代表相關(guān)性強(qiáng)。當(dāng)然在相關(guān)性的計(jì)算中除了相關(guān)系數(shù)以外,我們還會(huì)看pvalue是否顯著。如果我們想要把pvalue表示在圖中,可以在格子上添加*號(hào)或者具體的數(shù)值。同時(shí)因?yàn)檫@里可以看到其實(shí)不同的兩個(gè)指標(biāo)之間的關(guān)系是被重復(fù)展現(xiàn)了2次,比如symboling與normalized-losses(最上面一行的第二個(gè)格子,和從上往下的第二行的第一個(gè)格子),因此有時(shí)候我們只展現(xiàn)一半即對(duì)角線以上或以下的一半圖形。

怎么做熱圖Heatmap
1)需要什么格式的數(shù)據(jù)
有很多的軟件都可以做heatmap。我們要介紹的當(dāng)然是R,R默認(rèn)中提供了heatmap函數(shù)。當(dāng)然,R中也有很多具有heatmap功能的包,比如ggplot2,gplots。
今天我們介紹含有heatmap.2功能的gplots包。
heatmap.2函數(shù)和我們之前要求的數(shù)據(jù)類型不太一樣,這個(gè)函數(shù)輸入數(shù)據(jù)要求是個(gè)矩陣(matrix)。
data(mtcars)
x<-mtcars
y<-as.matrix(mtcars)
在R Studio中我們可以清楚的看到x和y的區(qū)別(雖然如果點(diǎn)開你也許會(huì)覺得x與y難道不是一模一樣嗎),x的type是dataframe的格式,而y是matrix也就是矩陣格式。這兩種數(shù)據(jù)類型有什么差別呢?matrix中的值只能是一個(gè)格式,比如都是字符型。而dataframe可以同時(shí)支持不同的類型比如數(shù)值型和字符型。

2)如何做圖
本節(jié)用一個(gè)不是那么生物的數(shù)據(jù)集來展示一下如何做熱圖。
data("attitude")
Ca <- cor(attitude)

如果直接使用默認(rèn)的heatmap.2功能我們可以看到:

和平時(shí)看到的heatmap有些不一樣,中間的這些藍(lán)色的線我們稱作“trace”:虛線表示這一列平均值,實(shí)線表示與平均值的偏離程度。默認(rèn)是按照列計(jì)算平均等,也可以改為行。
但是我們這里的數(shù)據(jù)是做相關(guān)性,所以這些線的意義就不是那么大。
圖例中也類似,展示了不同顏色對(duì)應(yīng)的值大小,而藍(lán)色的實(shí)線是根據(jù)數(shù)據(jù)分布做的密度曲線,虛線是平均值。
黑色的線之前我們已經(jīng)提到過是對(duì)數(shù)據(jù)進(jìn)行了聚類。
然后我們對(duì)圖進(jìn)行一些修改,紅色太扎眼換個(gè)顏色,把一些不需要的功能去掉。比如聚類比如這些藍(lán)色的線。
data("attitude")
Ca <- cor(attitude)#cor的結(jié)果就是矩陣
library(gplots)
library(RColorBrewer)
coul <- colorRampPalette(brewer.pal(8, "PiYG"))(25)#換個(gè)好看的顏色
hM <- format(round(Ca, 2))#對(duì)數(shù)據(jù)保留2位小數(shù)
heatmap.2(Ca,
trace="none",#不顯示trace
col=coul,#修改熱圖顏色
density.info = "none",#圖例取消density
key.xlab ='Correlation',
key.title = "",
cexRow = 1,cexCol = 1,#修改橫縱坐標(biāo)字體
Rowv = F,Colv = F, #去除聚類
margins = c(6, 6),
cellnote = hM,notecol='black'#添加相關(guān)系數(shù)的值及修改字體顏色
)

當(dāng)然也可以按照相同順序把相關(guān)性系數(shù)換成pvalue。顏色也可以根據(jù)情況進(jìn)行修改。其他的也可以進(jìn)一步調(diào)整。
總之,要記住不論做什么圖最最重要的是如何通過這張圖說明突出你想要傳達(dá)的內(nèi)容,你想要告訴讀者什么結(jié)論,那么就是你這張圖所需要展示的,千萬(wàn)不要一味追求圖形的好看或者復(fù)雜而忘記了你做圖的目的,不論任何形式的圖都只是數(shù)據(jù)的可視化,而可視化是為了增強(qiáng)數(shù)據(jù)的可讀性。
借用老板常說的一句話,做生信的,要玩方法不要被方法玩。
另外,最近發(fā)現(xiàn)一篇基于pheatmap的熱圖文章,寫的很詳盡,推薦給大家:
使用pheatmap包繪制熱圖