查看原文
其他

ComplexHeatmap 之 Heatmap Annotations 续(二)

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



点击上方关注我们





11、密度图注释

与直方图注释类似, anno_density() 将分布显示为拟合曲线:

ha = rowAnnotation(foo = anno_density(m))

可以控制密度峰值的高度,使分布看起来像一个“joyplot”

ha = rowAnnotation(foo = anno_density(m, joyplot_scale = 2,
    gp = gpar(fill = "#CCCCCC80")))

或者将分布可视化为小提琴图:

ha = rowAnnotation(foo = anno_density(m, type = "violin",
    gp = gpar(fill = 1:10)))

当输入变量中有太多行时,正常密度峰值的空间可能太小。在这种情况下,我们可以通过 热图 可视化分布:

m2 = matrix(rnorm(50*10), nrow = 50)
ha = rowAnnotation(foo = anno_density(m2, type = "heatmap", width = unit(6"cm")))

热图分布的配色方案由 heatmap_colors 控制:

ha = rowAnnotation(foo = anno_density(m2, type = "heatmap", width = unit(6"cm"),
    heatmap_colors = c("white""orange")))

12、Joyplot 注释

输入数据应该是矩阵列表

注意 anno_joyplot() 如果输入是矩阵,则始终应用于列。因为 joyplot 可视化了平行分布,矩阵不是必需的格式,列表已经足够了,如果你不确定如何设置为矩阵,只需将其转换为列表来使用它:

m = matrix(rnorm(1000), nc = 10)
lt = apply(m, 2function(x) data.frame(density(x)[c("x""y")]))
ha = rowAnnotation(foo = anno_joyplot(lt, width = unit(4"cm"),
    gp = gpar(fill = 1:10), transparency = 0.75))

或者只显示线条( scale 参数控制曲线的相对高度):

m = matrix(rnorm(5000), nc = 50)
lt = apply(m, 2function(x) data.frame(density(x)[c("x""y")]))
ha = rowAnnotation(foo = anno_joyplot(lt, width = unit(4"cm"), gp = gpar(fill = NA),
    scale = 4))

输入变量的格式很特殊。它可以是以下两个之一:

  • 一个矩阵(记住 anno_joyplot() 总是应用于矩阵的列),其中 x 坐标对应于 1:nrow(matrix) 并且矩阵中的每一列对应于游戏图中的一个分布。
  • 一个数据框列表,其中每个数据框有两列对应于 x 坐标和 y 坐标。

13、地平线图注释

地平线图作为注释只能添加为行注释anno_horizon() 的输入变量格式与前一节介绍的 anno_joyplot() 相同。

地平线图注释的默认样式为:

lt = lapply(1:20function(x) cumprod(1 + runif(1000, -x/100, x/100)) - 1)
ha = rowAnnotation(foo = anno_horizon(lt))

每个轨道中的值由 x/max(abs(x)) 归一化。

正值和负值的颜色由 gpar() 中的 pos_fillneg_fill 控制:

ha = rowAnnotation(foo = anno_horizon(lt,
    gp = gpar(pos_fill = "orange", neg_fill = "darkgreen")))

pos_fillneg_fill 可以指定为向量:

ha = rowAnnotation(foo = anno_horizon(lt,
    gp = gpar(pos_fill = rep(c("orange""red"), each = 10),
              neg_fill = rep(c("darkgreen""blue"), each = 10))))

负值的峰值是从底部还是从顶部开始:

ha = rowAnnotation(foo = anno_horizon(lt, negative_from_top = TRUE))

每两个相邻图表之间的间隔:

ha = rowAnnotation(foo = anno_horizon(lt, gap = unit(1"mm")))

14、文本注释

anno_text() 可以将文本用作注释。图形参数由 gp 控制:

ha = rowAnnotation(foo = anno_text(month.name, gp = gpar(fontsize = 1:12+4)))

位置 由 locationjust 控制。旋转由 rot 控制:

ha = rowAnnotation(foo = anno_text(month.name, location = 1, rot = 30,
    just = "right", gp = gpar(fontsize = 1:12+4)))
ha = rowAnnotation(foo = anno_text(month.name, location = 0.5, just = "center"))

locationjust 根据放置到热图中的注释的位置自动计算(例如,如果文本是热图的右注释,则文本向左对齐,如果它是左注释则向右对齐)。

width/height 是根据所有文本自动计算的。通常你不需要手动设置它的宽度/高度。

背景颜色可以由 gp 设置。这里 fill 控制填充的背景颜色,col 控制文本的颜色,非标准 border 控制背景边框颜色。

可以将宽度设置为最长文本宽度的 1.2 倍;

ha = rowAnnotation(foo = anno_text(month.name, location = 0.5, just = "center",
    gp = gpar(fill = rep(2:4, each = 4), col = "white", border = "black"),
    width = max_text_width(month.name)*1.2))

可以通过与 gridtext 包集成来绘制更复杂的文本。一个简单的例子如下:

text = sapply(LETTERS[1:10], function(x) {
    qq("<span style='color:red'>**@{x}**<sub>@{x}</sub></span>_@{x}_<sup>@{x}</sup>")
})
ha = rowAnnotation(
    foo = anno_text(gt_render(text, align_widths = TRUE,
                        r = unit(2"pt"),
                        padding = unit(c(2222), "pt")),
                    gp = gpar(box_col = "blue", box_lwd = 2),
                    just = "right",
                    location = unit(1"npc")
    ))

与其他注释不同,默认情况下文本注释没有 注释标题。可以通过在 anno_text() 中设置 show_name = TRUE 来添加标题:

m = matrix(rnorm(100), 10)
Heatmap(m) + rowAnnotation(month = anno_text(month.name[1:10], just = "center",
        location = unit(0.5"npc"), show_name = TRUE),
    annotation_name_rot = 0)


未完待续。


收官!


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

群二维码:


老俊俊微信:




知识星球:



所以今天你学习了吗?

欢迎小伙伴留言评论!

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

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

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

推 荐 阅 读




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

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