使用ComplexHeatmap绘制3D热图
起因
ComplexHeatmap包有一個densityHeatmap()函數用來對一組分布進行可視化。例如下面的例子:
library(ComplexHeatmap) set.seed(123) mat?=?matrix(rnorm(500),?ncol?=?10) colnames(mat)?=?letters[1:10] densityHeatmap(mat)在R圖形系統中,我們也可以使用histogram來可視化分布,因此從ComplexHeatmap版本2.7.9開始,我新加了一個函數frequencyHeatmap(),就像是一個histogram版本的density heatmap。其用法和densityHeatmap()非常類似:
frequencyHeatmap(mat)在這里,區間中的頻度使用熱圖進行可視化。
那么現在,頻度熱圖被稱作是密度熱圖的histogram版本,但這看起來一點都不像histogram。那么可能一個3D的熱圖在這里更加適合。這可以通過在frequencyHeatmap()中設置參數use_3d = TRUE來將2D熱圖轉換為3D熱圖:
frequencyHeatmap(mat,?use_3d?=?TRUE)這看起來好多了!下面一節我將會介紹如何在ComplexHeatmap包中集成3D熱圖功能的。
3D熱圖的實現
首先,我們要能畫3D的柱子,這可以通過新函數bar3D()實現。用法如下:
bar3D(x?=?0.5,?y?=?0.5,?w?=?0.2,?h?=?0.2,?l?=?unit(1,?"cm"),?theta?=?60)其中各個參數的意義不言而喻,見下圖:
在bar3D()中,fill參數控制柱子的顏色。為了增強3D效果,柱子的三個面的顏色有略微輕微不同的明亮度。
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"))參數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))好了,現在既然我們已經能夠畫3D的柱子了,為了實現3D的熱圖,我們可以通過cell_fun或者layer_fun提供的自定義函數來將每一個3D柱子放置在熱圖的格子上,其中柱子的高度和熱圖中相應的值對應。這里我寫了一個新函數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")當位于熱圖邊緣的柱子太高時,可能會和熱圖中其他元件重疊,那么這時候需要進行手動的微調。在上面的例子中,標題和legend和3D柱子有重疊,這可以通過手動設置ht_opt$HEATMAP_LEGEND_PADDING和ht_opt$TITLE_PADDING來進行調整:
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")看,現在看起來好多了。
下面一個例子是對一個麻疹疫苗數據集的可視化,第一張圖是2D熱圖,第二張圖是3D熱圖。源代碼可以通過點擊“閱讀全文”獲得。
最后,InteractiveComplexHeatmap包可以將任何通過ComplexHeatmap生成的熱圖轉變為一個Shiny app,那么Heatmap3D()生成的熱圖也同樣可以。只需要在熱圖生成后運行htShiny()即可:
往期精品(點擊圖片直達文字對應教程)
機器學習
后臺回復“生信寶典福利第一波”或點擊閱讀原文獲取教程合集
總結
以上是生活随笔為你收集整理的使用ComplexHeatmap绘制3D热图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NatureGenetics:所有五个异
- 下一篇: 厉害了!顶级学术期刊封面的“中国元素”