ComplexHeatmap 之 Heatmap Annotations 续(二)
点击上方关注我们
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, 2, function(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, 2, function(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:20, function(x) cumprod(1 + runif(1000, -x/100, x/100)) - 1)
ha = rowAnnotation(foo = anno_horizon(lt))
每个轨道中的值由 x/max(abs(x))
归一化。
正值和负值的颜色由 gpar()
中的 pos_fill
和 neg_fill
控制:
ha = rowAnnotation(foo = anno_horizon(lt,
gp = gpar(pos_fill = "orange", neg_fill = "darkgreen")))
pos_fill 和 neg_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)))
位置 由 location
和 just
控制。旋转由 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"))
location 和 just 根据放置到热图中的注释的位置自动计算(例如,如果文本是热图的右注释,则文本向左对齐,如果它是左注释则向右对齐)。
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(2, 2, 2, 2), "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 群 老俊俊生信交流群
文件夹里。欢迎加入。加我微信我也拉你进 微信群聊 老俊俊生信交流群
哦。
群二维码:
老俊俊微信:
知识星球:
所以今天你学习了吗?
欢迎小伙伴留言评论!
今天的分享就到这里了,敬请期待下一篇!
最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!
如果觉得对您帮助很大,赏杯快乐水喝喝吧!
推 荐 阅 读