??[可視化|R包]ComplexHeatmap學習筆記③Making A List of Heatmaps

  1. ComplexHeatmap學習筆記①Introduction to ComplexHeatmap package
  2. ComplexHeatmap學習筆記②Making A Single Heatmap

Making A List of Heatmaps 制作一組熱圖


A list of heatmaps可以優(yōu)化多個數(shù)據(jù)源之間對應關系的可視化糯累。在這個vignette中忙灼,我們將討論making a list of heatmaps 的配置呛每,您可以在[Examples]vignette 以及在ComplexHeatmap paper的[supplementaries]中看到更多真實的例子仅颇。

Heatmap concatenation 合并多個熱圖

你可以從左到右排列多個熱圖贱案。實際上寇仓,一個單獨的熱圖只是長度為1的heatmap list的特殊情況厚棵。

heatmap()實際上是一類單個heatmap的構造函數(shù)。如果要組合多個heatmap裳朋,用戶可以通過+運算符將一個heatmap附加到另一個heatmap病线。

library(ComplexHeatmap)

mat1 = matrix(rnorm(80, 2), 8, 10)
mat1 = rbind(mat1, matrix(rnorm(40, -2), 4, 10))
rownames(mat1) = paste0("R", 1:12)
colnames(mat1) = paste0("C", 1:10)

mat2 = matrix(rnorm(60, 2), 6, 10)
mat2 = rbind(mat2, matrix(rnorm(60, -2), 6, 10))
rownames(mat2) = paste0("R", 1:12)
colnames(mat2) = paste0("C", 1:10)

ht1 = Heatmap(mat1, name = "ht1")
ht2 = Heatmap(mat2, name = "ht2")
class(ht1)
## [1] "Heatmap"
## attr(,"package")
## [1] "ComplexHeatmap"
class(ht2)
## [1] "Heatmap"
## attr(,"package")
## [1] "ComplexHeatmap"
ht1 + ht2
兩圖拼接

在默認模式下,第二個heatmap中的樹形圖將被刪除鲤嫡,行順序也將與第一個相同.

兩個heatmap相加的返回值是一個heatmaplist對象送挑。直接調用ht_list對象將調用draw()方法的默認設置。通過顯式調用draw()方法暖眼,您可以擁有更多的控件惕耕,例如圖例和標題。

ht_list = ht1 + ht2
class(ht_list)
## [1] "HeatmapList"
## attr(,"package")
## [1] "ComplexHeatmap"

您可以在heatmap list中附加任意數(shù)量的heatmap诫肠。還可以將heatmap list 附加到heatmap list司澎。

ht1 + ht1 + ht1
ht1 + ht_list
ht_list + ht1
ht_list + ht_list

NULL 可以被賦值給heatmaplist中欺缘。當用戶想通過for循環(huán)構造一個heatmap list時,它將是很方便的挤安。

ht_list = NULL
for(s in sth) {
    ht_list = ht_list + Heatmap(...)
}

Titles 標題

A heatmap list還具有獨立于熱圖標題的標題谚殊。--單個heatmap有單獨的標題,組合起來的heatmap list也可以弄個heatmap list標題

ht1 = Heatmap(mat1, name = "ht1", row_title = "Heatmap 1", column_title = "Heatmap 1")
ht2 = Heatmap(mat2, name = "ht2", row_title = "Heatmap 2", column_title = "Heatmap 2")
ht_list = ht1 + ht2

draw(ht_list, row_title = "Two heatmaps, row title", row_title_gp = gpar(col = "red"),
    column_title = "Two heatmaps, column title", column_title_side = "bottom")

heatmap list標題

Gaps between heatmaps 熱圖間的間隔

熱圖間的間隔可以通過 gap 參數(shù)配合unit 對象來設置.

draw(ht_list, gap = unit(1, "cm"))
熱圖間的間隔距離設置
draw(ht_list + ht_list, gap = unit(c(3, 6, 9, 0), "mm"))
## Warning in .local(object, ...): Heatmap/row annotation names are duplicated: ht1, ht2
image.png

Size of heatmaps 熱圖的大小設置

一些(不是所有)熱圖的寬度可以設置為固定的寬度蛤铜。

ht1 = Heatmap(mat1, name = "ht1", column_title = "Heatmap 1")
ht2 = Heatmap(mat2, name = "ht2", column_title = "Heatmap 2", width = unit(5, "cm"))
ht1 + ht2
為熱圖設置固定寬度

or寬度可以設置為相對值嫩絮。 Please not in this case, width for all heatmaps should be set (relative width and fixed width can be mixed)

ht1 = Heatmap(mat1, name = "ht1", column_title = "Heatmap 1", width = 2)
ht2 = Heatmap(mat2, name = "ht2", column_title = "Heatmap 2", width = 1)
ht1 + ht2
為熱圖設置相對寬度

Auto adjustment 自動調整

如果繪制了多個熱圖,則會有一些自動調整围肥。應該有一個主熱圖剿干,默認情況下是第一個熱圖。在剩余熱圖中的一些設置將會被主熱圖的設置所修改 The adjustment are:

  • 剩余熱圖的行聚類被移除.
  • 剩余熱圖的行標題被移除.
  • 如果主熱圖被按行分隔穆刻,其他剩余熱圖也將被拆分置尔,拆分樣式和主熱圖一樣.

主熱圖可以通過“main_heatmap”參數(shù)指定。它的值可以是 a numeric index或熱圖的名稱(當然氢伟,在創(chuàng)建“熱圖”對象時需要設置熱圖名稱).

ht1 = Heatmap(mat1, name = "ht1", column_title = "Heatmap 1", km = 2)
ht2 = Heatmap(mat2, name = "ht2", column_title = "Heatmap 2")
ht1 + ht2
為熱圖設置title
# note we changed the order of `ht1` and `ht2`
draw(ht2 + ht1)
調換兩個熱圖的順序
# here although `ht1` is the second heatmap, we specify `ht1` to be
# the main heatmap by explicitely setting `main_heatmap` argument
draw(ht2 + ht1, main_heatmap = "ht1")
#用main_heatmap參數(shù)設定主熱圖
設置主熱圖

如果主熱圖中沒有行聚類榜轿,則所有其他熱圖也沒有行聚類

ht1 = Heatmap(mat1, name = "ht1", column_title = "Heatmap 1", cluster_rows = FALSE)
ht2 = Heatmap(mat2, name = "ht2", column_title = "Heatmap 2")
ht1 + ht2
主熱圖不設行聚類

Change graphic parameters simultaneously 同時更改圖形參數(shù)

ht_global_opt() can set graphic parameters for dimension names and titles as global settings.ht_global_opt()可以為維名稱和標題設置圖形參數(shù),將其設置為全局設置。

ht_global_opt(heatmap_row_names_gp = gpar(fontface = "italic"), 
              heatmap_column_names_gp = gpar(fontsize = 14))
ht1 = Heatmap(mat1, name = "ht1", column_title = "Heatmap 1")
ht2 = Heatmap(mat2, name = "ht2", column_title = "Heatmap 2")
ht1 + ht2
全局設置
ht_global_opt(RESET = TRUE)

以下是“ht_global_opt()”支持的全局設置。通過這個函數(shù)闷畸,您還可以控制圖例的設置.

names(ht_global_opt())
##  [1] "heatmap_row_names_gp"             "heatmap_column_names_gp"         
##  [3] "heatmap_row_title_gp"             "heatmap_column_title_gp"         
##  [5] "heatmap_legend_title_gp"          "heatmap_legend_title_position"   
##  [7] "heatmap_legend_labels_gp"         "heatmap_legend_grid_height"      
##  [9] "heatmap_legend_grid_width"        "heatmap_legend_grid_border"      
## [11] "annotation_legend_title_gp"       "annotation_legend_title_position"
## [13] "annotation_legend_labels_gp"      "annotation_legend_grid_height"   
## [15] "annotation_legend_grid_width"     "annotation_legend_grid_border"   
## [17] "fast_hclust"

Retrieve orders and dendrograms 檢索順序和樹狀圖

row_order, column_order, row_dend and column_dend 可以被用作從熱圖中檢索相應的信息. 用法可以直接從下方的例子中學習:

ht_list = ht1 + ht2
row_order(ht_list)
## [[1]]
##  [1]  8  3  4  1  5  7  2  6  9 11 10 12
column_order(ht_list)
## $ht1
##  [1]  5  1  3  2  7  9  6 10  8  4
## 
## $ht2
##  [1]  9  4  6  7  8  1  5 10  3  2

row_dend(ht_list)
## [[1]]
## 'dendrogram' with 2 branches and 12 members total, at height 16.14288
column_dend(ht_list)
## $ht1
## 'dendrogram' with 2 branches and 10 members total, at height 8.069474 
## 
## $ht2
## 'dendrogram' with 2 branches and 10 members total, at height 6.883646

如果尚未繪制“ht_list”茶敏,那么如果矩陣很大,調用這四個函數(shù)會有點慢。但是,如果已經(jīng)繪制了“ht_list”,這意味著已經(jīng)將聚類應用于矩陣助析,那么檢索這些信息將非常快椅您。

ht_list = draw(ht1 + ht2)
row_order(ht_list)
column_order(ht_list)
row_dend(ht_list)
column_dend(ht_list)

Heatmap list with row annotations 帶有行注釋的熱圖列表(Heatmap list)

行注釋可以添加到 heatmap list中, 查看 [Heatmap Annotation] 獲取更多的解釋.

Modify row orders/clustering in main heatmap 修改主熱圖中的行順序/聚類

從版本1.11.1, 主熱圖的行順序/聚類設置可以直接在"draw()"函數(shù)中設置外冀。這使得切換主熱圖非常方便,無需單獨修改熱圖中的設置掀泳。實際上雪隧,在'draw()'中指定的設置將覆蓋主熱圖中的相應設置。

split = rep(c("a", "b"), each = 6)
ht_list = Heatmap(mat1, name = "mat1", cluster_rows = FALSE, column_title = "mat1") + 
          Heatmap(mat2, name = "mat2", cluster_rows = FALSE, column_title = "mat2")
draw(ht_list, main_heatmap = "mat1", split = split)
image.png
draw(ht_list, main_heatmap = "mat2", km = 2, cluster_rows = TRUE)
image.png
draw(ht_list, cluster_rows = TRUE, main_heatmap = "mat1", show_row_dend =TRUE)
image.png
draw(ht_list, cluster_rows = TRUE, main_heatmap = "mat2", show_row_dend =TRUE)
image.png

Session info

sessionInfo()

## R version 3.5.1 Patched (2018-07-24 r75008)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows Server 2012 R2 x64 (build 9600)
## 
## Matrix products: default
## 
## locale:
## [1] LC_COLLATE=C                           LC_CTYPE=English_United States.1252   
## [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
## [5] LC_TIME=English_United States.1252    
## 
## attached base packages:
##  [1] stats4    parallel  grid      stats     graphics  grDevices utils     datasets  methods  
## [10] base     
## 
## other attached packages:
##  [1] dendextend_1.9.0      dendsort_0.3.3        cluster_2.0.7-1       IRanges_2.16.0       
##  [5] S4Vectors_0.20.0      BiocGenerics_0.28.0   HilbertCurve_1.12.0   circlize_0.4.4       
##  [9] ComplexHeatmap_1.20.0 knitr_1.20            markdown_0.8         
## 
## loaded via a namespace (and not attached):
##  [1] mclust_5.4.1           Rcpp_0.12.19           mvtnorm_1.0-8          lattice_0.20-35       
##  [5] png_0.1-7              class_7.3-14           assertthat_0.2.0       mime_0.6              
##  [9] R6_2.3.0               GenomeInfoDb_1.18.0    plyr_1.8.4             evaluate_0.12         
## [13] ggplot2_3.1.0          highr_0.7              pillar_1.3.0           GlobalOptions_0.1.0   
## [17] zlibbioc_1.28.0        rlang_0.3.0.1          lazyeval_0.2.1         diptest_0.75-7        
## [21] kernlab_0.9-27         whisker_0.3-2          GetoptLong_0.1.7       stringr_1.3.1         
## [25] RCurl_1.95-4.11        munsell_0.5.0          compiler_3.5.1         pkgconfig_2.0.2       
## [29] shape_1.4.4            nnet_7.3-12            tidyselect_0.2.5       gridExtra_2.3         
## [33] tibble_1.4.2           GenomeInfoDbData_1.2.0 viridisLite_0.3.0      crayon_1.3.4          
## [37] dplyr_0.7.7            MASS_7.3-51            bitops_1.0-6           gtable_0.2.0          
## [41] magrittr_1.5           scales_1.0.0           stringi_1.2.4          XVector_0.22.0        
## [45] viridis_0.5.1          flexmix_2.3-14         bindrcpp_0.2.2         robustbase_0.93-3     
## [49] fastcluster_1.1.25     HilbertVis_1.40.0      rjson_0.2.20           RColorBrewer_1.1-2    
## [53] tools_3.5.1            fpc_2.1-11.1           glue_1.3.0             trimcluster_0.1-2.1   
## [57] DEoptimR_1.0-8         purrr_0.2.5            colorspace_1.3-2       GenomicRanges_1.34.0  
## [61] prabclus_2.2-6         bindr_0.1.1            modeltools_0.2-22
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末员舵,一起剝皮案震驚了整個濱河市脑沿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌马僻,老刑警劉巖庄拇,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡措近,警方通過查閱死者的電腦和手機溶弟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞭郑,“玉大人辜御,你說我怎么就攤上這事∏牛” “怎么了我抠?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長袜茧。 經(jīng)常有香客問我,道長瓣窄,這世上最難降的妖魔是什么笛厦? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮俺夕,結果婚禮上裳凸,老公的妹妹穿的比我還像新娘。我一直安慰自己劝贸,他們只是感情好姨谷,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著映九,像睡著了一般梦湘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上件甥,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天捌议,我揣著相機與錄音,去河邊找鬼引有。 笑死瓣颅,一個胖子當著我的面吹牛,可吹牛的內容都是我干的譬正。 我是一名探鬼主播宫补,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼曾我!你這毒婦竟也來了粉怕?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤抒巢,失蹤者是張志新(化名)和其女友劉穎斋荞,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虐秦,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡平酿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年凤优,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜈彼。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡筑辨,死狀恐怖,靈堂內的尸體忽然破棺而出幸逆,到底是詐尸還是另有隱情棍辕,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布还绘,位于F島的核電站楚昭,受9級特大地震影響,放射性物質發(fā)生泄漏拍顷。R本人自食惡果不足惜抚太,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昔案。 院中可真熱鬧尿贫,春花似錦、人聲如沸踏揣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捞稿。三九已至又谋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娱局,已是汗流浹背搂根。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铃辖,地道東北人剩愧。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像娇斩,于是被迫代替她去往敵國和親仁卷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容