1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        使用ComplexHeatmap繪制3D熱圖

        共 2772字,需瀏覽 6分鐘

         ·

        2021-03-30 22:23

        起因

        ComplexHeatmap包有一個densityHeatmap()函數(shù)用來對一組分布進行可視化。例如下面的例子:

        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開始,我新加了一個函數(shù)frequencyHeatmap(),就像是一個histogram版本的density heatmap。其用法和densityHeatmap()非常類似:

        frequencyHeatmap(mat)

        在這里,區(qū)間中的頻度使用熱圖進行可視化。

        那么現(xiàn)在,頻度熱圖被稱作是密度熱圖的histogram版本,但這看起來一點都不像histogram。那么可能一個3D的熱圖在這里更加適合。這可以通過在frequencyHeatmap()中設置參數(shù)use_3d = TRUE來將2D熱圖轉(zhuǎn)換為3D熱圖:

        frequencyHeatmap(mat, use_3d = TRUE)

        這看起來好多了!下面一節(jié)我將會介紹如何在ComplexHeatmap包中集成3D熱圖功能的。


        3D熱圖的實現(xiàn)

        首先,我們要能畫3D的柱子,這可以通過新函數(shù)bar3D()實現(xiàn)。用法如下:

        bar3D(x = 0.5, y = 0.5, w = 0.2
            h = 0.2, l = unit(1"cm"), theta = 60)

        其中各個參數(shù)的意義不言而喻,見下圖:

        bar3D()中,fill參數(shù)控制柱子的顏色。為了增強3D效果,柱子的三個面的顏色有略微輕微不同的明亮度。

        bar3D(x = seq(0.20.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.20.8, length = 4), y = 0.5
            w = unit(5"mm"), h = unit(5"mm"), 
            l = unit(1"cm"), theta = c(20406080))

        好了,現(xiàn)在既然我們已經(jīng)能夠畫3D的柱子了,為了實現(xiàn)3D的熱圖,我們可以通過cell_fun或者layer_fun提供的自定義函數(shù)來將每一個3D柱子放置在熱圖的格子上,其中柱子的高度和熱圖中相應的值對應。這里我寫了一個新函數(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")

        當位于熱圖邊緣的柱子太高時,可能會和熱圖中其他元件重疊,那么這時候需要進行手動的微調(diào)。在上面的例子中,標題和legend和3D柱子有重疊,這可以通過手動設置ht_opt$HEATMAP_LEGEND_PADDINGht_opt$TITLE_PADDING來進行調(diào)整:

        ht_opt$HEATMAP_LEGEND_PADDING = unit(5"mm")
        ht_opt$TITLE_PADDING = unit(c(92), "mm"# bottom and top padding
        Heatmap3D(mat, name = "mat", column_title = "This is a 3D heatmap")

        看,現(xiàn)在看起來好多了。

        下面一個例子是對一個麻疹疫苗數(shù)據(jù)集的可視化,第一張圖是2D熱圖,第二張圖是3D熱圖。源代碼可以通過點擊“閱讀全文”獲得。

        最后,InteractiveComplexHeatmap包可以將任何通過ComplexHeatmap生成的熱圖轉(zhuǎn)變?yōu)橐粋€Shiny app,那么Heatmap3D()生成的熱圖也同樣可以。只需要在熱圖生成后運行htShiny()即可:


        往期精品(點擊圖片直達文字對應教程)

        機器學習

        后臺回復“生信寶典福利第一波”或點擊閱讀原文獲取教程合集



        瀏覽 61
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            AV爱操 | 强行扒开双腿猛烈进入免费 | 欧美精品无码一区二区 | 偷拍自拍网站 | 超碰网站在线观看 | 国产精品不卡一区二区红桃视频 | 亚洲视频豆花视频在线观看 | 亲攵女伦h长篇小说 | 调教师鞭臀虐菊男男调教在线观看 | 亚洲AV日韩AV无码裸体尤物 |