用pheatmap畫熱圖

假裝是前言

學(xué)了很久的R,一直也沒啥進(jìn)展,之前一直覺得R不是很容易的東西嗎,復(fù)制粘貼代碼就好了。。emmm,太年輕太年輕。。

我用R的日常就是畫熱圖,各種各樣的熱圖。所以網(wǎng)上能搜到的畫熱圖的教程我基本都看了一遍,heatmap3啊,ggplot2啊都試過,最后還是覺得pheatmap用起來最容易上手。雖然ggplot2很強(qiáng)大,但是殺雞就殺雞,拿牛刀干嘛?雖然pheatmap也有很多毛病,比如最不能忍的是沒法把column的標(biāo)簽給斜45°顯示,太不人性化了!

主要內(nèi)容整合自各種網(wǎng)上的教程及一個(gè)價(jià)值一毛錢的騰訊課堂課程,感興趣的可以花一毛錢聽一聽,講真,還是值一毛錢的??

安裝

#設(shè)置國(guó)內(nèi)鏡像
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(BioC_mirror="https://mirrors.tuna.tsinghua.edu.cn/bioconductor")
install.packages('devtools')
library(devtools)
install_github("raivokolde/pheatmap")

直接用install.package("pheatmap")也能下載到一個(gè)pheatmap的包,但是用起來感覺和上面這種方式是不一樣的。也許是不同的版本, 用以上方式下載的版本更新一些。

繪圖前準(zhǔn)備

#清空環(huán)境變量
rm(list=ls())
#獲取當(dāng)前工作目錄
getwd()
#設(shè)置工作目錄
setwd('C:/Users/hans/Desktop/')

R四丟丟是默認(rèn)保存之前運(yùn)行過的環(huán)境變量的,所以要先清除一下。接下來看看當(dāng)前的工作目錄在哪,最后把工作目錄調(diào)到桌面上。因?yàn)楹芏鄷r(shí)候老板給個(gè)excel放在其他位置可能不太容易找,所以統(tǒng)一放在桌面,等畫完了熱圖再統(tǒng)一歸檔到相關(guān)的文件夾中去。

加載包加載數(shù)據(jù)

#加載包
library(RColorBrewer)#設(shè)置顏色用的
library(pheatmap)
#設(shè)置配色方案
cc = colorRampPalette(rev(brewer.pal(n=7, name="RdYlBu"))) #Rd=red Yl=yellow Bu=blue
#讀入文件,如果確實(shí)過多,會(huì)無法聚類,最好保證沒有缺失,或?qū)⑷笔鎿Q為0
TPS<-read.csv(file = "TPS_expr.csv",row.names = 1,header = T,check.names = F,na.string=0) 
#如果矩陣內(nèi)容是fpkm表達(dá)量,一般取log10(fpkm+1)繪圖
TPS=log2(TPS+1)

2020年2月28日 這里加一個(gè)補(bǔ)充:很多時(shí)候是直接拿到的excel,如果需要用csv的話就得每次手動(dòng)另存為,就很麻煩。有沒有直接讀入excel的辦法呢?當(dāng)然有啦。install.packages("readxl") && library(readxl)
接下來使用mydata<-read_excel("data",sheet=1) 即可。查看幫助可以得到更多使用實(shí)例喲。

RColorBrewer是一個(gè)很常用的調(diào)顏色用的包,具體用法就不贅述了可以看別的教程。常用的就是經(jīng)典的紅黃藍(lán)配色,也有深紅和海軍藍(lán)的配色的(color = colorRampPalette(c("navy", "white", "firebrick3"))(100)),具體怎么選擇就看老板和個(gè)人喜好,反正保證一篇文章里熱圖的配色一致就好了。
把拿到的excel表另存為csv格式,用read.csv讀取到R里。這里畫的是一個(gè)TPS基因家族的熱圖,于是就把矩陣的名詞用TPS命名了。這里有幾個(gè)要設(shè)置的地方:
row.names=1設(shè)置的是第一列為數(shù)據(jù)的名稱,基本上是用基因的ID命名的。
header=T是指第一行為數(shù)據(jù)的列名。
check.names=F這個(gè)特別重要,當(dāng)你的列名是以數(shù)字開頭的時(shí)候,比如有的時(shí)候數(shù)據(jù)是時(shí)間相關(guān)的,6:00, 8:00, 10:00等,會(huì)在最前面顯示一個(gè)x并且冒號(hào)會(huì)給你替換成點(diǎn)(6:00x6.00)設(shè)置了檢查名稱為False之后就不會(huì)有這個(gè)問題了。這個(gè)點(diǎn)是在生信技能樹的vip群里看人家討論問題的時(shí)候?qū)W到的(感謝大佬們!???)
na.string=0是在一毛錢的課程里學(xué)到的,非常好用的一個(gè)參數(shù)。設(shè)置了0為缺失值之后,在后面畫圖的時(shí)候可以增加一個(gè)缺失值的顯示效果,感覺還挺不錯(cuò)的。

接下來就是玄學(xué)取log了。一毛錢的課程里提到:

如果矩陣內(nèi)容是fpkm表達(dá)量,一般取log10(fpkm+1)繪圖

但是只是說一般。畢竟所有的工具所有的圖都是為文章服務(wù)的,怎樣顯示效果好,能契合文章的講述方向,就取什么樣的值。我們一般取log2(fpkm+1)比較多。

繪圖

#繪圖
heatmap=pheatmap(TPS,color = cc(100),
                 main="TPS",
                 fontsize = 15,
                 scale="row",
                 border_color = NA,
                 na_col = "grey"
                 cluster_rows = T,cluster_cols = T,
                 show_rownames = T,show_colnames = T,
                 treeheight_row = 30,treeheight_col = 30,
                 cellheight = 15,cellwidth = 30,
                 cutree_row=2,cutree_col=2,
                 display_numbers = F,legend = T,
                 filename = "TPS.pdf"
)

參數(shù)解釋:
第一個(gè)參數(shù)是需要用pheatmap畫圖的數(shù)據(jù)
color: 設(shè)置顏色。如果想畫得更精細(xì)一些,可以取cc(1000)
main: 標(biāo)題,會(huì)顯示在最上面
fontsize: row的字體大小
scale: 是否歸一化為正態(tài)分布,可選row,column,none。一般對(duì)row進(jìn)行歸一化的情況比較多,column較少。
border_color: 是否顯示邊框及邊框的顏色,NA不顯示, red顯示紅色。支持簡(jiǎn)單的顏色單詞
na_col: 設(shè)置缺失值的顏色,支持簡(jiǎn)單顏色單詞,一般設(shè)置為灰色就滿好識(shí)別的。
cluster_rows & cluster_cols: 設(shè)置是否對(duì)行進(jìn)行聚類,這個(gè)就見仁見智,看你的實(shí)際需求了。當(dāng)缺失值較多的時(shí)候是無法進(jìn)行聚類的。一個(gè)解決辦法是讀取數(shù)據(jù)的時(shí)候不設(shè)置缺失值。
show_rownames & show_colnames: 是否顯示行/列的名稱
treeheight_row & treeheight_col: 當(dāng)前面設(shè)置了聚類之后,兩邊會(huì)出現(xiàn)聚類的樹,這個(gè)參數(shù)是設(shè)置樹的高度的。
cellheight & cellwidth: 設(shè)置每個(gè)各自的寬度和高度。有的時(shí)候不設(shè)置這兩個(gè)值畫出來的樹容易放飛自我??
cutree_row & cutree_col: 是否根據(jù)聚類情況把樹切開,可以設(shè)置切開的份數(shù)。
display_numbers: 設(shè)置是否顯示每個(gè)單元格的值。這個(gè)也是個(gè)人喜好及文章需求。
legend: 設(shè)置是否顯示旁邊的bar狀圖例,emmmm好像還沒碰到說不要那個(gè)玩意兒的情況。。
filename: 設(shè)置輸出文件的名字??梢栽O(shè)置的文件類型有:pdf,png,jpg,tiff,bmp

基本上一個(gè)符合老板要求的熱圖要調(diào)的就是這些參數(shù)了,當(dāng)然還有很多奇技淫巧可以把熱圖做得花里胡哨的,我之前很多次想做得更好看一點(diǎn)都被老板拒絕了。。心累。行叭, 就這樣了。有需要?jiǎng)e的進(jìn)階熱圖的自己查別的教程去,乖。
晚安。

賣萌哥
2019年1月26日01點(diǎn)19分于西雙版納

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容