假裝是前言
學(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è)置國內(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:00
→ x6.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
顯示紅色。支持簡單的顏色單詞
na_col
: 設(shè)置缺失值的顏色笙隙,支持簡單顏色單詞洪灯,一般設(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è)置輸出文件的名字缰雇∪胪担可以設(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分于西雙版納