日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用ComplexHeatmap绘制3D热图

發(fā)布時(shí)間:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用ComplexHeatmap绘制3D热图 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

起因

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。