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-depthz 值高的绘制在低的数据集之上。在这个例子中,我用浅灰色(z=5)绘制前 10000 条记录,然后用浅灰色(z=10)绘制前 2500 条记录,然后用灰色(z=15)绘制前 1000 条记录,以此类推

  • 其次,可以为每个数据集调整几何形状。在这个例子中,我修改了 crestbezier 半径纯度的值

  • 最后,颜色和厚度可以有效帮助数据分层。通常用浅色细线绘制 z 值较低的 link

image.png

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 被应用到一个数据点时,你可以访问数据点的属性,但是不能访问其他数据点。也就是说,没有直接的机制能够反问邻接数据点,但是你可以通过将一个 prevnext 参数与数据点关联起来

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)。你可以在条件表达式中任何数值后面加上 kbmbgb 表示碱基对乘子

有些特定的关键字在运行时被解析,例如 var(FIELD) 函数可以访问单个数据点的属性,其中 FIELD 可以是:

  • CHRnlink 中跨度 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 的显示

  • 第二条规则,将 hs1hs2 之间的所有 link 变为绿色,并将它们绘制在其他 link 的顶部。flow = continue 参数将测试后面的规则

  • 最后一条规则,将 hs2hs3 之间的 link 涂成蓝色,使其更厚,并进一步增加 z

image.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

名本无名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值