查看原文
其他

ComplexHeatmap 之 Heatmap List 续(二)

JunJunLab 老俊俊的生信笔记 2022-08-15


点击上方,关于我们




AUTUMN



一夜梧桐一报秋



本章节结束 热图列表 最后一部分内容。

11、绘制热图列表

直接使用 draw() 函数绘制:

# code only for demonstration
draw(ht_list, ...)

12、获取树状图顺序

row_order()column_order()row_dend()column_dend() 可用于从热图列表中检索相应信息。通过以下示例,用法很简单。但请记住,需要将这些函数应用于 draw() 返回的对象:

ht1 = Heatmap(mat1, name = "rnorm", col = col_rnorm)
ht2 = Heatmap(mat2, name = "runif", col = col_runif)
ht_list = ht1 + ht2
ht_list = draw(ht_list)

row_order(ht_list)
##  [1] 10  4  8  2  1 12 11  6  7  3  9  5
column_order(ht_list)
## $rnorm
##  [1]  5  2  7  6 10  1  9  8  4  3
##
## $runif
##  [1]  4 10  2  5  7  6  1  3  8  9

如果行或列被拆分,返回的值也将是一个列表:

ht1 = Heatmap(mat1, name = "rnorm", col = col_rnorm)
ht2 = Heatmap(mat2, name = "runif", col = col_runif, column_km = 2)
ht_list = ht1 + ht2
ht_list = draw(ht_list, row_km = 2)

row_order(ht_list)
## $`1`
## [1] 7 3 9 5
##
## $`2`
## [1] 10  4  8  2  1 12 11  6

column_order(ht_list)
## $rnorm
## $rnorm[[1]]
##  [1]  5  2  7  6 10  1  9  8  4  3
##
##
## $runif
## $runif$`2`
## [1]  4 10  2  5
##
## $runif$`1`
## [1] 7 6 1 3 8 9

可以为列顺序指定某个热图:

column_order(ht_list, name = "runif")
## $`2`
## [1]  4 10  2  5
##
## $`1`
## [1] 7 6 1 3 8 9

提取树状图的逻辑相同,垂直热图列表的逻辑也相同,因此我们在此不再展示更多示例。

13、全局更改参数

ht_opt() 是一个全局控制一些参数的选项函数。你可以通过此全局函数同时为所有热图或者注释设置一些参数。请注意,应该将其放在热图代码之前,并在绘制热图后重置所有选项值以免影响下一个热图绘制

ht_opt

##  Option                    Value
##  -------------------------:----------
##  heatmap_row_names_gp      NULL
##  heatmap_column_names_gp   NULL
##  heatmap_row_title_gp      NULL
##  heatmap_column_title_gp   NULL
##  legend_title_gp           NULL
##  legend_title_position     NULL
##  legend_labels_gp          NULL
##  legend_grid_height        NULL
##  legend_grid_width         NULL
##  legend_border             NULL
##  legend_gap                4mm, 4mm
##  heatmap_border            NULL
##  annotation_border         NULL
##  fast_hclust               FALSE
##  show_parent_dend_line     TRUE
##  verbose                   FALSE
##  message                   TRUE
##  show_vp                   FALSE
##  simple_anno_size          5mm
##  DENDROGRAM_PADDING        0.5mm
##  DIMNAME_PADDING           1mm
##  TITLE_PADDING             NULL
##  COLUMN_ANNO_PADDING       1mm
##  ROW_ANNO_PADDING          1mm
##  HEATMAP_LEGEND_PADDING    2mm
##  ANNOTATION_LEGEND_PADDING 2mm
##  save_last                 FALSE
##  validate_names            TRUE

有以下参数来控制所有热图:

  • heatmap_row_names_gp:在所有 Heatmap() 中设置 row_names_gp。
  • heatmap_column_names_gp:在所有 Heatmap() 中设置 column_names_gp。
  • heatmap_row_title_gp:在所有 Heatmap() 中设置 row_title_gp。
  • heatmap_column_title_gp:在所有 Heatmap() 中设置 column_title_gp。
  • heatmap_border:在所有 Heatmap() 中设置边框。

以下参数控制图例:

  • legend_title_gp:在所有热图图例和注释图例中设置 title_gp。
  • legend_title_position:在所有热图图例和注释图例中设置 title_position。
  • legend_labels_gp:在所有热图图例和注释图例中设置 labels_gp。
  • legend_grid_width:在所有热图图例和注释图例中设置网格宽度。
  • legend_grid_height:在所有热图图例和注释图例中设置 grid_height。
  • legend_border:在所有热图图例和注释图例中设置边框。

以下参数控制热图注释:

  • annotation_border:在所有 HeatmapAnnotation() 中设置边框。
  • anno_simple_size:设置简单注释的大小。

以下参数控制热图组件之间的间距:

  • DENDROGRAM_PADDING:树状图和热图主体之间的空间。
  • DIMNAME_PADDING:行/列名称和热图主体之间的空间。
  • TITLE_PADDING:行/列标题和热图正文之间的空间。
  • COLUMN_ANNO_PADDING:列注释和热图主体之间的空间。
  • ROW_ANNO_PADDING:行注释和热图主体之间的空间。

你可以通过传统方式(如 base::options())或 $ 运算符获取或设置选项值:

ht_opt("heatmap_row_names_gp")
ht_opt$heatmap_row_names_gp

# to set option values
ht_opt("heatmap_row_names_gp" = gpar(fontsize = 8))
ht_opt$heatmap_row_names_gp = gpar(fontsize = 8)

通过以下方式重置为默认值:

ht_opt(RESET = TRUE)

下面的例子展示了全局控制一些图形参数:

ht_opt(heatmap_column_names_gp = gpar(fontface = "italic"),
    heatmap_column_title_gp = gpar(fontsize = 10),
    legend_border = "black",
    heatmap_border = TRUE,
    annotation_border = TRUE
)
ht1 = Heatmap(mat1, name = "ht1", column_title = "Heatmap 1",
    top_annotation = HeatmapAnnotation(foo = 1:10))
ht2 = Heatmap(mat2, name = "ht2", column_title = "Heatmap 2",
    top_annotation = HeatmapAnnotation(bar = 1:10))
ht1 + ht2

ht_opt(RESET = TRUE)

也可以在 draw() 函数中设置这些全局参数来临时更改全局参数,并在绘制完成后重新设置。

14、调整注释产生的空白区域

热图注释可能有注释名称和轴,在最终布局中排列热图组件时也会考虑这些空间。有时,这种调整并不明智,可能会在图中看到不必要的空白区域。

一种情况是对于没有行名称的矩阵,热图右侧的空间由注释名称的大小决定,这会导致热图和图例之间出现空白。此外,热图列表级别的行标题绘制在注释轴的左侧,如果没有行树状图,则会提供空白区域。

adjust_annotation_extension 控制是否考虑布局的注释名称和轴的空间。比较以下两个图:

m = matrix(rnorm(100), 10)
ht = Heatmap(m, name = "mat",
    top_annotation = HeatmapAnnotation(foo = anno_points(1:10)),
    show_row_dend = FALSE)
draw(ht, row_title = "fooooooooooo", adjust_annotation_extension = TRUE,  # default
    column_title = "adjust_annotation_extension = TRUE")

draw(ht, row_title = "fooooooooooo", adjust_annotation_extension = FALSE,
    column_title = "adjust_annotation_extension = FALSE")

另一种部分解决空间问题的方法是将注释名称向左移动并使用 heamtap 级别的行标题:

Heatmap(m, name = "mat",
    top_annotation = HeatmapAnnotation(foo = anno_points(1:10),
        annotation_name_side = "left"),
    row_title = "fooooooooooo",
    show_row_dend = FALSE)

但是,有时也需要对注释进行这种调整,例如 当热图很短时:

ht = Heatmap(m, name = "mat",
    top_annotation = HeatmapAnnotation(foo = anno_points(1:10)),
    show_row_dend = FALSE)
draw(ht, row_title = "fooooooooooo", adjust_annotation_extension = TRUE,
    column_title = "adjust_annotation_extension = TRUE")

因此,我们将 adjust_annotation_extension 的默认值设置为 TRUE,用户可以根据具体场景进行配置。

15、在图周围手动增加空间

ComplexHeatmap 的布局并不完美,仍有可能将某些文本绘制到绘图区域之外。在这种情况下,您可以在 draw() 函数中手动设置 padding 参数以 增加最终绘图周围的空白区域

padding 的值应该是长度为 4 的单位向量。这四个值分别对应底部、左侧、顶部和右侧的空间。

下面的例子不是一个完美的例子,因为行名称的最大宽度可以由 max_row_name_width 参数控制,但我们仍然可以用它来演示 padding 的使用:

m2 = m
rownames(m2) = paste0("R"1:10)
rownames(m2)[1] = "a long long long long long row name"
ht = Heatmap(m2, name = "mat", row_names_side = "left", show_row_dend = FALSE)
draw(ht, padding = unit(c(22022), "mm")) ## see right heatmap in following



未完待续。


收官!


代码 我上传到 QQ 群 老俊俊生信交流群 文件夹里。欢迎加入。加我微信我也拉你进 微信群聊 老俊俊生信交流群 哦。

群二维码:


老俊俊微信:




知识星球:



所以今天你学习了吗?

欢迎小伙伴留言评论!

今天的分享就到这里了,敬请期待下一篇!

最后欢迎大家分享转发,您的点赞是对我的鼓励肯定

如果觉得对您帮助很大,赏杯快乐水喝喝吧!



 往期回顾 




ComplexHeatmap 之 Heatmap List 续(一)

ComplexHeatmap 之 Heatmap List

ComplexHeatmap 之 Heatmap Annotations 续(三)

ComplexHeatmap 之 Heatmap Annotations 续(二)

ComplexHeatmap 之 Heatmap Annotations 续(一)

ComplexHeatmap 之 Heatmap Annotations

ComplexHeatmap 之 A Single Heatmap 续(二)

ComplexHeatmap 之 A Single Heatmap 续(一)

你要的 ComplexHeatmap TA 来了!

你有一份作业未领取

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存