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_side 和 annotation_legend_side 设置.
draw(ht_list, heatmap_legend_side = "left", annotation_legend_side = "bottom")
show_heatmap_legend 和 show_annotation_legend,show_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 - 标题相对于图例的位置, 可以是 topcenter,topleft,leftcenter 和 lefttop.
color_bar - 色块的样式, 即连续还是离散
grid_height - 色块中小格的高度, 仅适用于离散色块
grid_height - 小格宽度
grid_border - 小格颜色
at - 展示在图例中的刻度值
labels - 对应刻度值的标签
labels_gp - 标签的图形参数
nrow 和 ncol - 如果图例太多, 可以组织为行列
legend_direction - 控制图例方向, 可以是 vertical 和 horizontal
legend_width 和 legend_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_list 和 annotation_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
来源: http://www.jianshu.com/p/42adf881e587