查看原文
其他

circlize 之 Introduction

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

circlize 之 Introduction

背景

Circos 是用 perl 语言编写的软件,可以来绘制复杂的环形图,但是需要在 linux 环境运行,此外需要很多配置文件。为了方便数据的分析和可视化,顾祖光(作者)基于 R 编程环境开发了 circlize 的 R 包,使用起来更方便简单。

作者顾祖光南京大学博士毕业,现在在德国癌症研究中心工作,是一名生信研究员,研究领域有基因组学、表观组学、开发软件、可视化等等。其中 ComlexHeatmapEnrichedHeatmapsimplifyEnrichment 等强大的 R 包都是他开发的,大佬!

circlize 可以使用简单的图形一层层叠加,构成更加复杂的图形出来,展示更多更复杂的信息。

circlize 入门

A、基本函数

1、基本图形

  • circos.points(): 在单元格添加点.
  • circos.lines(): 在单元格添加线.
  • circos.segments(): 在单元格添加片段.
  • circos.rect(): 在单元格添加矩形.
  • circos.polygon(): 在单元格添加多边形.
  • circos.text(): 在单元格添加文字.
  • circos.axis() 在单元格添加坐标.

2、添加两个位置的连线

  • circos.link()

3、添加高级图形

  • circos.barplot(): 绘制条形图.
  • circos.boxplot(): 绘制箱型图.
  • circos.violin(): 绘制小提琴图.
  • circos.heatmap(): 绘制环形热图.
  • circos.raster(): 绘制光栅图.
  • circos.arrow(): 绘制环形箭头.

4、环形布局排列

  • circos.initialize(): 分配扇区.
  • circos.track(): 单个轨道上创建单元格.
  • circos.update(): 更新单元格.
  • circos.par(): 图形参数设置.
  • circos.info(): 打印绘图参数.
  • circos.clear(): 重置.

B、示例图形

C、快速预览

创建随机数据:

set.seed(999)
n = 1000
df = data.frame(sectors = sample(letters[1:8], n, replace = TRUE),
                x = rnorm(n), y = runif(n))
head(df,3)
  sectors          x         y
1       c -0.3383765 0.2277292
2       d  0.2012877 0.8345422
3       e  0.6027117 0.6507941

初始化:

library(circlize)
circos.par("track.height" = 0.1# 设置轨道高度,相当于圆半径10%
circos.initialize(df$sectors, x = df$x) # 初始化

添加轨道:

circos.track(df$sectors, y = df$y,
             panel.fun = function(x, y) {
               # 添加扇区的标签
               circos.text(CELL_META$xcenter, 
                           CELL_META$cell.ylim[2] +
                           mm_y(5), # 偏移5mm
                           CELL_META$sector.index)
               # 添加扇区刻度            
               circos.axis(labels.cex = 1)
             })

添加点和文字:

col = rep(c("#FF0000""#00FF00"), 4)
circos.trackPoints(df$sectors, df$x, df$y, col = col, pch = 16, cex = 0.5# 添加点
circos.text(-10.5"text", sector.index = "a", track.index = 1# 给a添加text文字

添加柱形图:

bgcol = rep(c("#EFEFEF""#CCCCCC"), 4)
circos.trackHist(df$sectors, df$x, bin.size = 0.2, bg.col = bgcol, col = NA)

添加线图:

circos.track(df$sectors, x = df$x, y = df$y,
    panel.fun = function(x, y) {
        ind = sample(length(x), 10)
        x2 = x[ind]
        y2 = y[ind]
        od = order(x2)
        circos.lines(x2[od], y2[od])
})

更新指定轨道的单元格并添加点和文字:

circos.update(sector.index = "d", track.index = 2
    bg.col = "#FF8080", bg.border = "black")
circos.points(x = -2:2, y = rep(0.55), col = "white")
circos.text(CELL_META$xcenter, # 文字位置
            CELL_META$ycenter, # 文字位置
            "updated", col = "white")

添加热图:

circos.track(ylim = c(01), panel.fun = function(x, y) {
    xlim = CELL_META$xlim
    ylim = CELL_META$ylim
    breaks = seq(xlim[1], xlim[2], by = 0.1)
    n_breaks = length(breaks)
    circos.rect(breaks[-n_breaks], rep(ylim[1], n_breaks - 1),
                breaks[-1], rep(ylim[2], n_breaks - 1),
                col = rand_color(n_breaks), border = NA)
})

添加连接线:

circos.link("a"0"b"0, h = 0.4)
circos.link("c", c(-0.50.5), "d", c(-0.5,0.5), 
            col = "red"# 连接线的填充颜色
            border = "blue"# 连接线颜色
            h = 0.2 ) # 连接线高度
circos.link("e"0"g", c(-1,1), 
            col = "green"
            border = "black"
            lwd = 2# 连接线粗细
            lty = 2# 连接线形状

清空画布:

circos.clear()

欢迎小伙伴留言评论!

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

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

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

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

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