最近休息了幾天。沒有來得及更新瘦穆。今天我們來講一講熱圖怎么繪制
什么是熱圖(Heatmap)
熱圖是一個以顏色變化來顯示數(shù)據(jù)的矩陣贱鼻。Toussaint Loua在1873年就曾使用過熱圖來繪制對巴黎各區(qū)的社會學(xué)統(tǒng)計。
生物學(xué)中熱圖經(jīng)常用于展示多個基因在不同樣本中的表達(dá)水平县踢。然后可以通過聚類等方式查看不同組(如疾病組和對照組)特有的pattern瓷蛙。
如上圖每一列代表一個樣本(左側(cè)的樣本是Basal悼瓮,右側(cè)的樣本是Luminal),每一行代表一個基因艰猬,顏色代表了表達(dá)量(這張圖沒有顯示圖例横堡,不知道是偏綠還是偏紅代表高表達(dá)量)」谔遥可以看到這些挑選出的基因在兩組的表達(dá)有較大的差異命贴,EN1、FOXC1這幾個基因在Basal組總體呈現(xiàn)紅色,在Luminal呈現(xiàn)綠色胸蛛。而后面的幾個基因在Luminal總體呈現(xiàn)紅色污茵,在Basal總體呈現(xiàn)綠色。而外面的樹狀圖形是對基因和樣本的聚類葬项,通常聚類的結(jié)果把基因的表達(dá)量相似的聚在一起泞当,把基因表達(dá)的pattern相似的樣本聚在一起。所以在該圖中可以看到Basal的樣本都聚在了一起玷室,Luminal 的樣本也都聚在了一起零蓉。通常如果兩組的差異較明顯,組內(nèi)的pattern較為相似穷缤,就能有這樣的聚類結(jié)果——一個組的樣本聚類在一起。相反如果是差異較小的兩組樣本箩兽,就很可能混在一起津肛。
熱圖還可以用于展示其他物質(zhì)的豐度比如微生物的相對豐度、代謝組不同物質(zhì)的含量等等汗贫。當(dāng)然身坐,另一個熱圖的重要用處就是展現(xiàn)不同指標(biāo)、不同樣本等之間的相關(guān)性落包。
此時顏色代表的就是相關(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)性的計算中除了相關(guān)系數(shù)以外有序,我們還會看pvalue是否顯著抹腿。如果我們想要把pvalue表示在圖中,可以在格子上添加*號或者具體的數(shù)值旭寿。同時因?yàn)檫@里可以看到其實(shí)不同的兩個指標(biāo)之間的關(guān)系是被重復(fù)展現(xiàn)了2次警绩,比如symboling與normalized-losses(最上面一行的第二個格子,和從上往下的第二行的第一個格子)盅称,因此有時候我們只展現(xiàn)一半即對角線以上或以下的一半圖形肩祥。
怎么做熱圖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ù)類型不太一樣,這個函數(shù)輸入數(shù)據(jù)要求是個矩陣(matrix)俯逾。
data(mtcars)
x<-mtcars
y<-as.matrix(mtcars)
在R Studio中我們可以清楚的看到x和y的區(qū)別(雖然如果點(diǎn)開你也許會覺得x與y難道不是一模一樣嗎)贸桶,x的type是dataframe的格式,而y是matrix也就是矩陣格式桌肴。這兩種數(shù)據(jù)類型有什么差別呢皇筛?matrix中的值只能是一個格式,比如都是字符型坠七。而dataframe可以同時支持不同的類型比如數(shù)值型和字符型水醋。
2)如何做圖
本節(jié)用一個不是那么生物的數(shù)據(jù)集來展示一下如何做熱圖。
data("attitude")
Ca <- cor(attitude)
如果直接使用默認(rèn)的heatmap.2功能我們可以看到:
和平時看到的heatmap有些不一樣彪置,中間的這些藍(lán)色的線我們稱作“trace”:虛線表示這一列平均值拄踪,實(shí)線表示與平均值的偏離程度。默認(rèn)是按照列計算平均等拳魁,也可以改為行惶桐。
但是我們這里的數(shù)據(jù)是做相關(guān)性,所以這些線的意義就不是那么大潘懊。
圖例中也類似姚糊,展示了不同顏色對應(yīng)的值大小,而藍(lán)色的實(shí)線是根據(jù)數(shù)據(jù)分布做的密度曲線授舟,虛線是平均值救恨。
黑色的線之前我們已經(jīng)提到過是對數(shù)據(jù)進(jìn)行了聚類。
然后我們對圖進(jìn)行一些修改释树,紅色太扎眼換個顏色肠槽,把一些不需要的功能去掉。比如聚類比如這些藍(lán)色的線躏哩。
data("attitude")
Ca <- cor(attitude)#cor的結(jié)果就是矩陣
library(gplots)
library(RColorBrewer)
coul <- colorRampPalette(brewer.pal(8, "PiYG"))(25)#換個好看的顏色
hM <- format(round(Ca, 2))#對數(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é)論正驻,那么就是你這張圖所需要展示的弊攘,千萬不要一味追求圖形的好看或者復(fù)雜而忘記了你做圖的目的,不論任何形式的圖都只是數(shù)據(jù)的可視化姑曙,而可視化是為了增強(qiáng)數(shù)據(jù)的可讀性襟交。
借用老板常說的一句話,做生信的伤靠,要玩方法不要被方法玩捣域。
另外,最近發(fā)現(xiàn)一篇基于pheatmap的熱圖文章,寫的很詳盡焕梅,推薦給大家:
使用pheatmap包繪制熱圖