使用ComplexHeatmap绘制3D热图
起因
ComplexHeatmap包有一個(gè)densityHeatmap()函數(shù)用來對一組分布進(jìn)行可視化。例如下面的例子:
library(ComplexHeatmap) set.seed(123) mat?=?matrix(rnorm(500),?ncol?=?10) colnames(mat)?=?letters[1:10] densityHeatmap(mat)在R圖形系統(tǒng)中,我們也可以使用histogram來可視化分布,因此從ComplexHeatmap版本2.7.9開始,我新加了一個(gè)函數(shù)frequencyHeatmap(),就像是一個(gè)histogram版本的density heatmap。其用法和densityHeatmap()非常類似:
frequencyHeatmap(mat)在這里,區(qū)間中的頻度使用熱圖進(jìn)行可視化。
那么現(xiàn)在,頻度熱圖被稱作是密度熱圖的histogram版本,但這看起來一點(diǎn)都不像histogram。那么可能一個(gè)3D的熱圖在這里更加適合。這可以通過在frequencyHeatmap()中設(shè)置參數(shù)use_3d = TRUE來將2D熱圖轉(zhuǎn)換為3D熱圖:
frequencyHeatmap(mat,?use_3d?=?TRUE)這看起來好多了!下面一節(jié)我將會(huì)介紹如何在ComplexHeatmap包中集成3D熱圖功能的。
3D熱圖的實(shí)現(xiàn)
首先,我們要能畫3D的柱子,這可以通過新函數(shù)bar3D()實(shí)現(xiàn)。用法如下:
bar3D(x?=?0.5,?y?=?0.5,?w?=?0.2,?h?=?0.2,?l?=?unit(1,?"cm"),?theta?=?60)其中各個(gè)參數(shù)的意義不言而喻,見下圖:
在bar3D()中,fill參數(shù)控制柱子的顏色。為了增強(qiáng)3D效果,柱子的三個(gè)面的顏色有略微輕微不同的明亮度。
bar3D(x?=?seq(0.2,?0.8,?length?=?4),?y?=?0.5,?w?=?unit(5,?"mm"),?h?=?unit(5,?"mm"),?l?=?unit(1,?"cm"),?fill?=?c("red",?"green",?"blue",?"purple"))參數(shù)theta控制投影的角度,見下例:
bar3D(x?=?seq(0.2,?0.8,?length?=?4),?y?=?0.5,?w?=?unit(5,?"mm"),?h?=?unit(5,?"mm"),?l?=?unit(1,?"cm"),?theta?=?c(20,?40,?60,?80))好了,現(xiàn)在既然我們已經(jīng)能夠畫3D的柱子了,為了實(shí)現(xiàn)3D的熱圖,我們可以通過cell_fun或者layer_fun提供的自定義函數(shù)來將每一個(gè)3D柱子放置在熱圖的格子上,其中柱子的高度和熱圖中相應(yīng)的值對應(yīng)。這里我寫了一個(gè)新函數(shù)Heatmap3D()可以直接拿來使用。其用法和Heatmap()幾乎完全相同。見下面的例子:
set.seed(7) mat?=?matrix(runif(100),?10) rownames(mat)?=?LETTERS[1:10] colnames(mat)?=?letters[1:10] Heatmap3D(mat,?name?=?"mat",?column_title?=?"This?is?a?3D?heatmap")當(dāng)位于熱圖邊緣的柱子太高時(shí),可能會(huì)和熱圖中其他元件重疊,那么這時(shí)候需要進(jìn)行手動(dòng)的微調(diào)。在上面的例子中,標(biāo)題和legend和3D柱子有重疊,這可以通過手動(dòng)設(shè)置ht_opt$HEATMAP_LEGEND_PADDING和ht_opt$TITLE_PADDING來進(jìn)行調(diào)整:
ht_opt$HEATMAP_LEGEND_PADDING?=?unit(5,?"mm") ht_opt$TITLE_PADDING?=?unit(c(9,?2),?"mm")?#?bottom?and?top?padding Heatmap3D(mat,?name?=?"mat",?column_title?=?"This?is?a?3D?heatmap")看,現(xiàn)在看起來好多了。
下面一個(gè)例子是對一個(gè)麻疹疫苗數(shù)據(jù)集的可視化,第一張圖是2D熱圖,第二張圖是3D熱圖。源代碼可以通過點(diǎn)擊“閱讀全文”獲得。
最后,InteractiveComplexHeatmap包可以將任何通過ComplexHeatmap生成的熱圖轉(zhuǎn)變?yōu)橐粋€(gè)Shiny app,那么Heatmap3D()生成的熱圖也同樣可以。只需要在熱圖生成后運(yùn)行htShiny()即可:
往期精品(點(diǎn)擊圖片直達(dá)文字對應(yīng)教程)
機(jī)器學(xué)習(xí)
后臺回復(fù)“生信寶典福利第一波”或點(diǎn)擊閱讀原文獲取教程合集
總結(jié)
以上是生活随笔為你收集整理的使用ComplexHeatmap绘制3D热图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NatureGenetics:所有五个异
- 下一篇: 厉害了!顶级学术期刊封面的“中国元素”