美文网首页Cook R生物信息学与算法数据科学与R语言
【r<-包】ComplexHeatmap(5):热图和注释

【r<-包】ComplexHeatmap(5):热图和注释

作者: 王诗翔 | 来源:发表于2019-03-24 15:42 被阅读20次

    Author: Zuguang Gu ( z.gu@dkfz.de )
    翻译:诗翔
    Date: 2018-10-30


    热图的图例是由彩色条块、标签和标题组成。 ComplexHeatmap 包根据输入矩阵和注释自动生成图例,也提供了自定义和添加新图例的灵活性。

    基本设置

    所有热图和行注释的图例放在一起,列注释的图例放在一起。

    library(ComplexHeatmap)
    library(circlize)
    
    set.seed(123)
    mat = matrix(rnorm(80, 2), 8, 10)
    mat = rbind(mat, matrix(rnorm(40, -2), 4, 10))
    rownames(mat) = paste0("R", 1:12)
    colnames(mat) = paste0("C", 1:10)
    
    ha_column = HeatmapAnnotation(df = data.frame(type1 = c(rep("a", 5), rep("b", 5))),
        col = list(type1 = c("a" =  "red", "b" = "blue")))
    ha_row = rowAnnotation(df = data.frame(type2 = c(rep("A", 6), rep("B", 6))),
        col = list(type2 = c("A" =  "green", "B" = "orange")), width = unit(1, "cm"))
    
    ht1 = Heatmap(mat, name = "ht1", column_title = "Heatmap 1", top_annotation = ha_column)
    ht2 = Heatmap(mat, name = "ht2", column_title = "Heatmap 2")
    ht_list = ht1 + ht2 + ha_row
    
    draw(ht_list)
    

    图例放置在哪边可以通过heatmap_legend_sideannotation_legend_side设置。

    draw(ht_list, heatmap_legend_side = "left", annotation_legend_side = "bottom")
    

    show_heatmap_legendshow_annotation_legendshow_legend则设置图例是否可见。

    draw(ht_list, show_heatmap_legend = FALSE, show_annotation_legend = FALSE)
    
    ha_column = HeatmapAnnotation(df = data.frame(type1 = c(rep("a", 5), rep("b", 5))),
        col = list(type1 = c("a" =  "red", "b" = "blue")), show_legend = FALSE)
    ha_row = rowAnnotation(df = data.frame(type2 = c(rep("A", 6), rep("B", 6))),
        col = list(type2 = c("A" =  "green", "B" = "orange")), show_legend = FALSE, width = unit(1, "cm"))
    
    ht1 = Heatmap(mat, name = "ht1", column_title = "Heatmap 1", top_annotation = ha_column)
    ht2 = Heatmap(mat, name = "ht2", column_title = "Heatmap 2", show_heatmap_legend = FALSE)
    ht1 + ht2 + ha_row
    

    图例自定义

    图例本身也可以自定义。通过将自定义选项传入heatmap_legend_param(热图),annotation_legend_param(注释)即可实现,下面是一些可选参数。

    • title - 图例标题
    • title_gp - 图例标题的图形参数
    • title_position - 标题相对于图例的位置,可以是topcentertopleftleftcenterlefttop
    • color_bar - 色块的样式,即连续还是离散
    • grid_height - 色块中小格的高度,仅适用于离散色块
    • grid_height - 小格宽度
    • grid_border - 小格颜色
    • at - 展示在图例中的刻度值
    • labels - 对应刻度值的标签
    • labels_gp - 标签的图形参数
    • nrowncol - 如果图例太多,可以组织为行列
    • legend_direction - 控制图例方向,可以是verticalhorizontal
    • legend_widthlegend_height - 图例的宽度和高度(连续值色块)

    下面是例子:

    df = data.frame(type = c(rep("a", 5), rep("b", 5)))
    ha = HeatmapAnnotation(df = df, col = list(type = c("a" =  "red", "b" = "blue")),
        annotation_legend_param = list(type = list(title = "TYPE", title_gp = gpar(fontsize = 14),
                                                   labels_gp = gpar(fontsize = 8))))
    ht1 = Heatmap(mat, name = "ht1", column_title = "Heatmap 1", top_annotation = ha)
    ht2 = Heatmap(mat, name = "ht2", column_title = "Heatmap 2",
        heatmap_legend_param = list(title = "Heatmap2", title_gp = gpar(fontsize = 8),
            labels_gp = gpar(fontsize = 14)))
    ht1 + ht2
    
    ha = HeatmapAnnotation(df = df, col = list(type = c("a" =  "red", "b" = "blue")),
        annotation_legend_param = list(type = list(title = "TYPE", title_gp = gpar(fontsize = 14),
            labels_gp = gpar(fontsize = 8), at = c("a", "b"), labels = c("A", "B"))))
    ht1 = Heatmap(mat, name = "ht1", column_title = "Heatmap 1", top_annotation = ha,
        heatmap_legend_param = list(at = c(-3, 0, 3), labels = c("-three", "zero", "+three")))
    ht1 + ht2
    

    如果注释水平太多,可以排列为行列。

    ha_chr = rowAnnotation(chr = sample(paste0("chr", 1:20), nrow(mat), replace = TRUE),
        annotation_legend_param = list(chr = list(ncol = 2, title = "chromosome", title_position = "topcenter")),
        width = unit(5, "mm"))
    ht1 = Heatmap(mat, name = "ht1")
    ht1 + ha_chr
    

    或者放在底部

    ha_chr = rowAnnotation(chr = sample(paste0("chr", 1:20), nrow(mat), replace = TRUE),
        annotation_legend_param = list(chr = list(nrow = 2, title = "chr", title_position = "leftcenter")),
        width = unit(5, "mm"))
    ht1 = Heatmap(mat, name = "ht1", show_heatmap_legend = FALSE)
    draw(ht1 + ha_chr, heatmap_legend_side = "bottom")
    

    按列组织:

    ha_chr = rowAnnotation(chr = sample(paste0("chr", 1:20), nrow(mat), replace = TRUE),
        annotation_legend_param = list(chr = list(nrow = 2, title = "chr", title_position = "leftcenter", legend_direction = "vertical")),
        width = unit(5, "mm"))
    ht1 = Heatmap(mat, name = "ht1", show_heatmap_legend = FALSE)
    draw(ht1 + ha_chr, heatmap_legend_side = "bottom")
    

    离散的色块可以用于连续值:

    ha = HeatmapAnnotation(df = data.frame(value = runif(10)),
        col = list(value = colorRamp2(c(0, 1), c("white", "blue"))),
        annotation_legend_param = list(color_bar = "discrete", at = c(0, 0.5, 1)))
    Heatmap(mat, name = "ht1", top_annotation = ha, heatmap_legend_param = list(color_bar = "discrete"))
    

    一些用户倾向于把图例放在底部:

    ht = Heatmap(mat, name = "ht1", heatmap_legend_param = list(legend_direction = "horizontal",
        legend_width = unit(5, "cm"), title_position = "lefttop"))
    draw(ht, heatmap_legend_side = "bottom")
    

    相似地,我们可以调整图例的高度

    Heatmap(mat, name = "ht1", heatmap_legend_param = list(legend_height = unit(5, "cm")))
    

    如果你想要为所有的热图更改默认设置,使用全局选项。

    ht_global_opt(heatmap_legend_title_gp = gpar(fontsize = 16), annotation_legend_labels_gp = gpar(fontface = "italic"))
    ha = HeatmapAnnotation(df = data.frame(value = runif(10)),
        col = list(value = colorRamp2(c(0, 1), c("white", "blue"))))
    ht1 = Heatmap(mat, name = "ht1", column_title = "Heatmap 1", top_annotation = ha)
    ht2 = Heatmap(mat, name = "ht2", column_title = "Heatmap 2", heatmap_legend_param = list(title_gp = gpar(fontsize = 8)))
    ht1 + ht2
    
    ht_global_opt(RESET = TRUE)
    

    添加新图例

    自定义图例使用一个grob对象列表传入heatmap_legend_listannotation_legend_list参数中。

    对于高级用户,可以使用frameGrob()placeGrob()构造图例。

    ha = HeatmapAnnotation(points = anno_points(rnorm(10)))
    ht2 = Heatmap(mat, name = "ht2", column_title = "Heatmap 2", top_annotation = ha, show_heatmap_legend = FALSE)
    lgd = legendGrob(c("dots"), pch = 16)
    draw(ht1 + ht2, annotation_legend_list = list(lgd))
    

    现在,该包提供Legend()函数提供grob格式的图例。在下面的例子中,我有有含点的列注释,我们也想要为它们展示图例。

    ha = HeatmapAnnotation(points = anno_points(rnorm(10), gp = gpar(col = rep(2:3, each = 5))))
    ht = Heatmap(mat, name = "ht2", column_title = "Heatmap 2", top_annotation = ha)
    lgd = Legend(at = c("class1", "class2"), title = "points", type = "points", legend_gp = gpar(col = 2:3))
    draw(ht, annotation_legend_list = list(lgd))
    

    阅读 this blog link 查看更多说明。

    会话信息

    sessionInfo()
    ## R version 3.5.1 Patched (2018-07-12 r74967)
    ## Platform: x86_64-pc-linux-gnu (64-bit)
    ## Running under: Ubuntu 16.04.5 LTS
    ## 
    ## Matrix products: default
    ## BLAS: /home/biocbuild/bbs-3.8-bioc/R/lib/libRblas.so
    ## LAPACK: /home/biocbuild/bbs-3.8-bioc/R/lib/libRlapack.so
    ## 
    ## locale:
    ##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8       
    ##  [4] LC_COLLATE=C               LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
    ##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
    ## [10] LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
    ## 
    ## 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
    

    相关文章

      网友评论

        本文标题:【r<-包】ComplexHeatmap(5):热图和注释

        本文链接:https://www.haomeiwen.com/subject/vqeuvqtx.html