查看原文
其他

circlize 之 Legends

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

circlize 之 Legends

circlize 包自身绘图时不能生成图例,可以借助其它 R 包来绘制图例,首先绘制一个环形图:

library(circlize)

col_fun = colorRamp2(c(-202), c("green""yellow""red"))
circlize_plot = function() {
    set.seed(12345)
    sectors = letters[1:10]
    circos.initialize(sectors, xlim = c(01))
    circos.track(ylim = c(01), panel.fun = function(x, y) {
        circos.points(runif(20), runif(20), cex = 0.5, pch = 16, col = 2)
        circos.points(runif(20), runif(20), cex = 0.5, pch = 16, col = 3)
    })
    circos.track(ylim = c(01), panel.fun = function(x, y) {
        circos.lines(sort(runif(20)), runif(20), col = 4)
        circos.lines(sort(runif(20)), runif(20), col = 5)
    })

    for(i in 1:10) {
        circos.link(sample(sectors, 1), sort(runif(10))[1:2],
                    sample(sectors, 1), sort(runif(10))[1:2],
                    col = add_transparency(col_fun(rnorm(1))))
    }
    circos.clear()
}

使用 ComplexHeatmap 包的 Legend()函数来创建图例,使用 packLegend()函数打包图例:

library(ComplexHeatmap)
# discrete 离散型图例
lgd_points = Legend(at = c("label1""label2"), type = "points",
    legend_gp = gpar(col = 2:3), title_position = "topleft",
    title = "Track1")
# discrete 离散型图例
lgd_lines = Legend(at = c("label3""label4"), type = "lines",
    legend_gp = gpar(col = 4:5, lwd = 2), title_position = "topleft",
    title = "Track2")
# continuous 连续型图例
lgd_links = Legend(at = c(-2, -1012), col_fun = col_fun,
    title_position = "topleft", title = "Links")

# 打包图例
lgd_list_vertical = packLegend(lgd_points, lgd_lines, lgd_links)
lgd_list_vertical

画图:

circlize_plot()
# next the grid graphics are added directly to the plot
# where circlize has created.
draw(lgd_list_vertical, x = unit(4"mm"), y = unit(4"mm"), just = c("left""bottom"))

将图例放置在不同位置:

lgd_list_vertical2 = packLegend(lgd_points, lgd_lines)
circlize_plot()
# next the grid graphics are added directly to the plot
# where circlize has created.
draw(lgd_list_vertical2, x = unit(4"mm"), y = unit(4"mm"), just = c("left""bottom"))
draw(lgd_links, x = unit(1"npc") - unit(2"mm"), y = unit(4"mm"),
    just = c("right""bottom"))

使用 gridBase 包添加图例:

library(gridBase)
plot.new()
circle_size = unit(1"snpc"# snpc unit gives you a square region

pushViewport(viewport(x = 0, y = 0.5, width = circle_size, height = circle_size,
    just = c("left""center")))
par(omi = gridOMI(), new = TRUE)
circlize_plot()
upViewport()

draw(lgd_list_vertical, x = circle_size, just = "left")

将图例水平放置:

lgd_points = Legend(at = c("label1""label2"), type = "points",
    legend_gp = gpar(col = 2:3), title_position = "topleft",
    title = "Track1", nrow = 1)

lgd_lines = Legend(at = c("label3""label4"), type = "lines",
    legend_gp = gpar(col = 4:5, lwd = 2), title_position = "topleft",
    title = "Track2", nrow = 1)

lgd_links = Legend(at = c(-2, -1012), col_fun = col_fun,
    title_position = "topleft", title = "Links", direction = "horizontal")

lgd_list_horizontal = packLegend(lgd_points, lgd_lines, lgd_links,
    direction = "horizontal")

# 添加图例
plot.new()
pushViewport(viewport(x = 0.5, y = 1, width = circle_size, height = circle_size,
    just = c("center""top")))
par(omi = gridOMI(), new = TRUE)
circlize_plot()
upViewport()

draw(lgd_list_horizontal, y = unit(1"npc") - circle_size, just = "top")

欢迎小伙伴留言评论!

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

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

如果觉得对您帮助很大,打赏一下吧!

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

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