circos 可视化手册- rules 篇

欢迎关注微信公众号《生信修炼手册》!

rulescircos中的一种黑魔法,可以在不改变数据的情况下,对展现形式进行调整。rules代表规则,本质上就是编程语言中的条件判断语句, 首先给定一个条件,当符合条件时,执行具体的行为。

基本示例如下:

<rule>
condition = var(intrachr)
show = no
</rule>

condition定义的就是条件,示例中的show = no就是条件满足时需要执行的事情。

在定义condition时,有以下3种形式

1. condition = 1

这种写法表示条件永远成立,直接执行后面的行为即可

2. var

通过var获取对应字段的值, 这里的字段分成两种,一种是数据文件中的值,比如plots对应的数据文件都会有value值,另外一种是系统内置的,会自动计算的值,比如自动计算区间的长度,用size表示,常用字段有以下几种, 其中的n用于区分多个区域,比如link连接2个区域,第一个区域为1,第二个区域为2; 当只有一个区域时,比如highlights, plots中,就不需要添加n

  • CHRn
    返回染色体的名字,示例用法var(chr) eq "hs1"

  • STARTn
    返回区域的起始位置, 示例用法var(start) > 300

  • ENDn
    表示区域的终止位置,示例用法var(end) < 500

  • POSn
    表示区域的中心点的位置,示例用法var(position1) < 500

  • SIZEn
    表示区域的长度,示例用法 var(size1) < 5mb

  • REVn
    links独有的字段,判断某个区域是否反向,如果起始位置大于终止位置,代表是反向的,返回值为1,否则返回值为0, 示例用法condition = var(rev1)

  • INV
    links独有的字段,如果一个link连接的两个区域方向不同,一个正向,一个反向,返回值为1,其他情况返回值为0,示例用法condition = var(inv)

  • INTERCHR
    links独有的字段,如果一个link连接的两个区域位于两条染色体上,返回值为1,其他情况返回值为0,示例用法condition = var(interchr)

  • INTRACHR
    links独有的字段 ,如果一个link连接的两个区域位于同一条染色体上,返回值为1,其他情况返回值为0,示例用法condition = var(intrachr)

对于数据文件而言,可以在其中添加对应的系统属性,也可以添加自定义的属性,下面的例子展示了如何访问数据文件中定义的colorthickness属性

<rule>
condition = var(color) ne “grey” && var(thickness) == 2
z = 5
</rule>

&&符号代表与的意思,只有两个条件同时满足时,才符合这个condition的条件。

3. 函数

共有下面9种函数

  1. conf
    conf用于获取配置文件中设定的参数的值,示例conf(plots,color_alt), 返回值为plots这个block中,设定的color_alt参数的值

  2. on
    on用于判断是否在某条染色体或者某段区间上,用法示例on(hs1)

  3. within
    withinon的作用类似,用法示例within(hs2,40Mb,80Mb)

  4. between
    links独有的函数,判断·是否在两条染色体之间,用法示例between(hs2,hs3)

  5. fromto
    links独有的函数,判断连线的方向,用法示例fromto(hs2,hs3)

  6. tofrom
    tofrom类似,只不过方向相反,用法示例tofrom(hs2,hs3)

  7. from
    links独有的函数,判断连线的起始位置,用法示例from(hs1)

  8. to
    links独有的函数,判断连线的终止位置,用法示例to(hs1)

  9. chrlen
    返回染色体的长度,用法示例chrlen(hs1)

了解了条件如何定义之后,就需要看条件符合时,可以执行哪些行为。要定义一个rules的行为,必须结合其上下文环境。从下面的结构图可以看到,rules可以出现在ideogram, highligjts, plots, links这4种block 中。行为本质上就是可以调整的属性值,所以对于不同的block, 其属性值不同。
circos 可视化手册- rules 篇
由于不同block下对应的参数特别多,就不具体展开了。对于每个block下对应属性的详细信息,可以翻阅之前的文章。

掌握了条件和行为的定义之后,理解单个rule的作用就没有问题了。但是rules是由多个rule构成,当多个rule放在一起是,其条件判断是怎么样的呢?

看一个例子
circos 可视化手册- rules 篇
对于value = 1的点而言,其颜色最终是什么呢?

答案是red, 因为只要遇到第一个符合条件的rule之后,就不在判断后续的其他rules了。所以最终的颜色是红色。这种条件判断的逻辑实际上是由flow这个参数控制的

有个参数控制了多个rule存在时条件判断的逻辑,这个参数就是flow

flow的取值有以下6种

  1. continues if true
  2. continues if false
  3. stop if true
  4. stop if false
  5. restart if true
  6. restart if false

默认值为continues if false, 只有当不符合当前条件时,才会判断是否符合下一个条件,对于上面的示例,如果想要点变成蓝色,只需要设置flow = continues if true 即可。