【R畫圖】環(huán)形熱圖

熱圖(heatmap)在生信領(lǐng)域基本就是常規(guī)操作,基本技能,入門操作。能畫熱圖的工具也有很多,我自己常用的R包是pheatmap。

最近經(jīng)常看見環(huán)狀的熱圖,所以就搜了一下資料學(xué)習(xí)一下,測(cè)試一下。

環(huán)狀熱圖我也經(jīng)常會(huì)在論文中看到,用法和熱圖相同,但更適合于需要展示較多基因(數(shù)據(jù))時(shí)來(lái)使用。

===安裝=====

install.packages("circlize")

install.packages("ComplexHeatmap")

library('ComplexHeatmap')

library('circlize')

===測(cè)試===

data<-read.table("expression.txt",header=T,row.names=1)

head(data)

//轉(zhuǎn)化為矩陣并對(duì)其進(jìn)行歸一化

madt<-as.matrix(data)

madt2<-t(scale(t(madt)))

Heatmap(madt2)? ? ?//這就是默認(rèn)參數(shù),普通的熱圖

range(madt2)? ?//查看值的分布

mycol=colorRamp2(c(-1.7, 0.3, 2.3),c("blue", "white", "red")) //定義顏色范圍

circos.heatmap(madt2,col=mycol)? //默認(rèn)參數(shù)

注:

circos.clear()? //繪制完成后需要使用此函數(shù)完全清除布局

circos.par(gap.after=c(50))? ? //

調(diào)整圓環(huán)首尾間的距離,數(shù)值越大,距離越寬

circos.heatmap(madt2,col=mycol, dend.side="inside",rownames.side="outside",rownames.col="black",rownames.cex=0.9,rownames.font=1,cluster=TRUE)

注:dend.side:控制行聚類樹的方向,inside為顯示在圓環(huán)內(nèi)圈,outside為顯示在圓環(huán)外圈

#rownames.side:控制矩陣行名的方向,與dend.side相同;但注意二者不能在同一側(cè),必須一內(nèi)一外

#cluster=TRUE為對(duì)行聚類,cluster=FALSE則不顯示聚類

下面是換了inside和outside的結(jié)果:

===聚類樹的調(diào)整和美化(需要用到兩個(gè)別的包)===

install.packages("dendextend")? ? ?//改顏色

install.packages("dendsort")? ? ? ? ? //聚類樹回調(diào)

library(dendextend)

library(dendsort)

circos.par(gap.after=c(50))

circos.heatmap(madt2,col=mycol,dend.side="inside",rownames.side="outside",track.height=0.38,rownames.col="black",rownames.cex=0.9,rownames.font=1,cluster=TRUE,dend.track.height=0.18,dend.callback=function(dend,m,si){color_branches(dend,k=15,col=1:15)})

注:track.height:軌道的高度,數(shù)值越大圓環(huán)越粗? dend.track.height:調(diào)整行聚類樹的高度? dend.callback:用于聚類樹的回調(diào),當(dāng)需要對(duì)聚類樹進(jìn)行重新排序,或者添加顏色時(shí)使用

包含的三個(gè)參數(shù):dend:當(dāng)前扇區(qū)的樹狀圖;m:當(dāng)前扇區(qū)對(duì)應(yīng)的子矩陣;si:當(dāng)前扇區(qū)的名稱? ?color_branches():修改聚類樹顏色

circos.clear()

//添加圖例標(biāo)簽等

lg=Legend(title="Exp",col_fun=mycol,direction= c("vertical"))

grid.draw(lg)

//添加列名

circos.track(track.index=get.current.track.index(),panel.fun=function(x,y)

{

if(CELL_META$sector.numeric.index==1)

{

cn=colnames(madt2)

n=length(cn)

circos.text(rep(CELL_META$cell.xlim[2],n)+convert_x(0.3,"mm"), //x坐標(biāo)

4.1+(1:n)*0.7, //y坐標(biāo)和間距

cn,cex=0.8,adj=c(0,1),facing="inside")

}

},bg.border=NA)

mycol2=colorRamp2(c(-1.7, 0.5, 2.3),c("#57ab81", "white", "#ff9600"))

也可以更改上面的顏色,從而改變熱圖的配色:

===分組熱圖繪制========

#circos.heatmap()內(nèi)只能是一個(gè)矩陣,但如果矩陣數(shù)據(jù)存在分組,可以用split參數(shù)來(lái)指定分類變量

split = sample(letters[1:2], 40, replace = TRUE)

split = factor(split, levels = letters[1:2])

circos.clear()

circos.par(gap.after=c(22))

circos.heatmap(madt2,col=mycol,split=split,dend.side="inside",rownames.side="outside",track.height = 0.38,

rownames.col="black",rownames.cex=0.9,

rownames.font=1,

cluster=TRUE,

dend.track.height=0.18,

dend.callback=function(dend,m,si)?

{

color_branches(dend,k=15,col=1:15)

}

)

//假設(shè)有兩個(gè)熱圖的矩陣數(shù)據(jù)

madt2<-t(scale(t(madt)))

madt3<-t(scale(t(madt)))

split2 = sample(letters[1:2], 40, replace = TRUE)

split2 = factor(split2, levels = letters[1:2])

circos.clear()

circos.par(gap.after=c(8))

circos.heatmap(madt2,col=mycol2,split=split2,dend.side="outside",

cluster=TRUE,

dend.track.height=0.2,

dend.callback=function(dend,m,si) {

color_branches(dend,k=15,col=1:15)

}

)

circos.heatmap(madt3, col = mycol,rownames.side="inside",rownames.cex=0.8)

本文使用 文章同步助手 同步

?著作權(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)容