rules
是circos
中的一种黑魔法,可以在不改变数据的情况下,对展现形式进行调整。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)
对于数据文件而言,可以在其中添加对应的系统属性,也可以添加自定义的属性,下面的例子展示了如何访问数据文件中定义的color
和thickness
属性
<rule> condition = var(color) ne “grey” && var(thickness) == 2 z = 5 </rule>
&&
符号代表与的意思,只有两个条件同时满足时,才符合这个condition
的条件。
3. 函数
共有下面9种函数
- conf
conf
用于获取配置文件中设定的参数的值,示例conf(plots,color_alt)
, 返回值为plots
这个block中,设定的color_alt
参数的值 - on
on
用于判断是否在某条染色体或者某段区间上,用法示例on(hs1)
- within
within
和on
的作用类似,用法示例within(hs2,40Mb,80Mb)
- between
links
独有的函数,判断·是否在两条染色体之间,用法示例between(hs2,hs3)
- fromto
links
独有的函数,判断连线的方向,用法示例fromto(hs2,hs3)
- tofrom
和
tofrom
类似,只不过方向相反,用法示例tofrom(hs2,hs3)
- from
links
独有的函数,判断连线的起始位置,用法示例from(hs1)
- to
links
独有的函数,判断连线的终止位置,用法示例to(hs1)
- 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
存在时条件判断的逻辑,这个参数就是flow
。
flow
的取值有以下6种
- continues if true
- continues if false
- stop if true
- stop if false
- restart if true
- restart if false
默认值为continues if false
, 只有当不符合当前条件时,才会判断是否符合下一个条件,对于上面的示例,如果想要点变成蓝色,只需要设置flow = continues if true
即可。