circos 学习手册(十七)
link 和 relationships(二)
3. link formatting
通常,如果有多个数据文件,则每个文件都与自己的 <link>
块相关联
<links>
# global parameters here
...
<link>
file = /path/to/file
# local parameters for this data set
...
</link>
<link>
file = /path/to/file
# local parameters for this data set
...
</link>
...
</links>
当在一个图像中组合多个 link
数据时,需要记住几件事
-
首先,要为每个数据集设置想要的
z-depth
,z
值高的绘制在低的数据集之上。在这个例子中,我用浅灰色(z=5
)绘制前10000
条记录,然后用浅灰色(z=10
)绘制前2500
条记录,然后用灰色(z=15
)绘制前1000
条记录,以此类推 -
其次,可以为每个数据集调整几何形状。在这个例子中,我修改了
crest
和bezier
半径纯度的值 -
最后,颜色和厚度可以有效帮助数据分层。通常用浅色细线绘制
z
值较低的link
4. link rules - Part I
rules
是 <plot>
或 <link>
块中特殊的块,它根据位置、值、格式或者与数据有关的任何其他属性
一般格式是
# for 2D plots
<plots>
<plot>
<rules>
<rule>
...
</rule>
</rules>
</plot>
</plots>
# for links
<links>
<link>
<rules>
<rule>
...
</rule>
</rules>
</link>
</links>
每个 <link>
块可以有一个关联的 <rules>
块,该块又包含一个或多个 <rule>
块。每个 <rule>
块都包含一个测试条件和格式参数。
当 link
通过测试条件,rule
块中的格式化参数将会应用于该 link
数据点被独立测试
rule
将独立应用于每个数据点。数据点可以是高亮显示、直方图,散点图或连接。
当 rule
被应用到一个数据点时,你可以访问数据点的属性,但是不能访问其他数据点。也就是说,没有直接的机制能够反问邻接数据点,但是你可以通过将一个 prev
和 next
参数与数据点关联起来
hs1 0 9 0.25 next=0.5
hs1 10 19 0.5 prev=0.25,next=0.75
hs1 20 29 0.75 prev=0.5,next=1.00
...
rule 语法
每个 rule
必须包含一个 condition
参数,用于测试每个数据点
4.1 rule 条件
条件的格式是 perl
代码,会被自动执行而不需要显式使用 eval()
函数。
可以使用一些辅助函数来简化对多个参数的测试(如 between
)。你可以在条件表达式中任何数值后面加上 kb
、mb
或 gb
表示碱基对乘子
有些特定的关键字在运行时被解析,例如 var(FIELD)
函数可以访问单个数据点的属性,其中 FIELD
可以是:
-
CHRn
:link
中跨度n
的染色体号(e.g. var(chr1)
) -
STARTn
:跨度n
的起始位置 (e.g. var(start2)
) -
ENDn
:跨度n
的终止位置(e.g. var(end2)
) -
POSn
:跨度n
的中间位置 (e.g. var(position1)
) -
SIZEn
:跨度n
的大小(e.g. var(size1)
) -
REVn
:如果link
末端位置倒序返回1
(e.g. start > end
) -
INV
:如果link
是颠倒的,返回1
(两个末端只有一个发生颠倒) -
INTERCHR
:如果link
末端在不同染色体上返回1
,否则返回0
(e.g. var(interchr)
) -
INTRACHR
:如果link
末端在相同染色体上返回1
,否则返回0
(e.g. var(intrachr)
)
上述所说的跨度 n
,表示连接的起始点和终止点,即 n=1
(起始) 或 n=2
(终止)
数字后缀仅应用于 link
,并测试 link
的开始和结束,与单个坐标范围相关联的数据类型不使用数字后缀(eg,start
)
condition = var(chr1) eq "hs1" # link starts on hs1
condition = var(size1) < 1mb # link start span is shorter than 1Mb
condition = 1 # always true for any link
4.2 条件测试
规则按以下顺序应用:
-
首先,任何包含
importance
参数的规则,按照importance
降序方式排序 -
其次,任何不包含
importance
参数的规则,按照出现顺序排序。importance
参数允许你对规则优先级进行排序,而不必移动它们
当规则通过测试时,它将应用于数据点,此时,规则链是否终止,取决于 flow
参数
默认情况下,通过第一条规则便终止规则链,当规则失败时,将在数据点上测试下一个规则。直到通过规则测试或者规则都测试完毕为止
规则级联
默认情况下,当通过规则,将终止规则链
<rule>
# if this rule passes
</rule>
<rule>
# all subsequent rules are not tested
</rule>
可以通过设置 flow
参数来更改此行为。如果 flow=continue
,那么通过的规则不再使用级联短路。后续规则将被测试
<rule>
...
flow = continue # if this rule passes, continue testing
</rule>
flow
参数可以有四个不同的值
# continue testing
flow = continue { if true|false }
# continue testing, but start at top of rule chain
flow = restart { if true|false }
# stop testing
flow = stop { if true|false }
# goto rule associated with tag=TAG
flow = goto TAG { if true|false }
你可以有多个 flow
参数以满足不同的情况
<rule>
...
flow = stop if false
flow = goto otherrule if true
</rule>
<rule>
tag = otherrule
...
</rule>
如果存在 flow
指令,则规则可能缺少条件,你可以使用以下方法短路所有规则
<rule>
flow = stop
</rule>
使用 goto
跳过不想测试的规则
<rule>
flow = goto myrule
</rule>
... rules you don't want to use
<rule>
tag = myrule
...
</rule>
规则示例
下面是个简单的例子
<link>
<link>
file = data/5/segdup.txt
<rules>
<rule>
condition = var(intrachr)
show = no
</rule>
<rule>
condition = between(hs1,hs2)
color = green
z = 10
flow = continue
</rule>
<rule>
condition = between(hs2,hs3)
color = blue
thickness = 2
z = 15
</rule>
</rules>
</link>
</links>
-
第一条规则是当
var(intrachr)
为true
时,通过设置show=no
来关闭染色体link
的显示 -
第二条规则,将
hs1
和hs2
之间的所有link
变为绿色,并将它们绘制在其他link
的顶部。flow = continue
参数将测试后面的规则 -
最后一条规则,将
hs2
和hs3
之间的link
涂成蓝色,使其更厚,并进一步增加z
值