circos 可视化手册- rules 篇

2020-05-09 17:41:43 浏览数 (2)

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, 其属性值不同。

由于不同block下对应的参数特别多,就不具体展开了。对于每个block下对应属性的详细信息,可以翻阅之前的文章。

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

看一个例子

对于value = 1的点而言,其颜色最终是什么呢?

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

有个参数控制了多个rule存在时条件判断的逻辑,这个参数就是flowflow的取值有以下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 即可。

0 人点赞