link 和 relationships(三)
5. link rules - Part II
规则 rule
可以允许你定制分层和格式化你的 link
上节,我们了解了如何根据染色体改变 link
的颜色
在这一节中,我们将展示如何根据 link
的染色体或基于位置和 link
末端的大小来对 link
进行分层和格式化
5.1 多条件
一个规则可以有多个条件参数。它们使用 AND
进行连接,即所有条件都要满足。
例如,测试 link
是否在染色体之间的且起始大小是否大于 40kb
<rule>
condition = var(interchr)
condition = var(size1) > 40kb
...
</rule>
也可以组合在一个参数内
condition = var(interchr) && var(size1) > 40kb
记住:条件使用 AND
组合,而不是 OR
5.2 帮助函数
下面几个帮助函数可以简化测试数据点的位置
-
on(CHR)
:数据所在染色体CHR
上返回1
,对于links
将测试两端点 -
from(CHR)
:如果link
起始点在染色体CHR
上,返回1
,只用于link
-
to(CHR)
:如果link
结束在染色体CHR
,返回1
,只用于link
-
between(CHR1,CHR2)
:link
在CHR1
和CHR2
之间返回1
,忽略方向,只用于link
-
fromto(CHR1,CHR2)
:如果link
是从CHR1
到CHR2
返回1
,只用于link
-
tofrom(CHR1,CHR2)
:如果link
是从CHR2
到CHR1
,返回1
,只用于link
on()
函数还有一个变体,用于测试染色体以及坐标
-
on(CHR,START,END)
,如果数据点在染色体CHR
的区间START-END
内,返回1
,link
测试两端
要测试数据点坐标是否完全落在区间内
-
within(CHR,START,END)
,如果数据点完全落在染色体CHR
的区间START-END
内,返回1
,link
测试两端
5.3 示例
<rules>
<rule>
condition = var(interchr)
condition = within(hs2,40Mb,80Mb)
z = 60
color = red
thickness = 5
</rule>
<rule>
condition = max(var(size1),var(size2)) > 40kb
z = 50
color = green
thickness = 5
</rule>
<rule>
condition = max(var(size1),var(size2)) > 10kb
z = 45
color = dgrey
thickness = 4
</rule>
<rule>
condition = max(var(size1),var(size2)) > 5kb
z = 40
color = grey
thickness = 3
</rule>
<rule>
condition = max(var(size1),var(size2)) > 1000
z = 35
color = lgrey
thickness = 2
</rule>
</rules>
第一条规则,为任何一端位于 hs2:40-80Mb
区域的 link
添加颜色为红色
后面 4
条规则根据 link
末端的最大最小值更改颜色和厚度。最大的末端的 link
被绘制成绿色,后续规则测试较低的尺寸
![](https://img.haomeiwen.com/i18546936/c87cdc3fd3d16a12.png)
6. link rules - Part III
rule
可以影响 link
的几何形状。我们修改前面的例子,使连接延伸到染色体的外径
![](https://img.haomeiwen.com/i18546936/163726ce78157269.png)
下面的例子,将对染色体内的连接进行了采样。第一条规则将隐藏其两端彼此间的距离在 1Mb
以内的任何对象。
这里使用 var(pos1)
和 var(pos2)
对连接的开始和结束位置进行中间采样
第二条规则应用于末端在 50Mb
以内的染色体连接,这些设置为蓝色并通过设置 bezier_radius
大于 1
使其朝外。
最后一条规则禁止任何其他染色体内的连接,即两端间距超过 100 Mb
的连接
<rule>
condition = var(intrachr)
condition = abs(var(pos1) - var(pos2)) < 1Mb
show = no
</rule>
<rule>
condition = var(intrachr)
condition = abs(var(pos1) - var(pos2)) < 50Mb
color = dblue_a2
bezier_radius = 1.1r
bezier_radius_purity = 0.25
</rule>
<rule>
condition = var(intrachr)
condition = abs(var(pos1) - var(pos2)) < 100Mb
color = dgreen_a2
crest = 2
bezier_radius = 0.75r
bezier_radius_purity = 0.25
</rule>
<rule>
condition = var(intrachr)
show = no
</rule>
![](https://img.haomeiwen.com/i18546936/1472280eeb2deee8.png)
7. link rules - Part IV
规则可以基于 link
特征函数设置格式化值。例如,你可以将 link
的厚度定义为与 link
的跨度大小成正比。
在前面的示例中,规则将常量赋值给格式参数
<rule>
...
thickness = 2
color = red
</rule>
若要根据连接的特征指定值,可以使用 eval
<rule>
...
thickness = eval(max(1,round(var(size1)/1000)))
</rule>
eval()
将解析参数,并将其分配给参数。上面的 tickness
将连接的第一个跨度的大小除以 1000
如果跨度为 28kb
,则厚度为 28
.如果小于 500bp
,则厚度为 1
对于本例的图像,我设置了四个表达式,它们都使用 eval
为连接指定厚度,半径,颜色和 z
深度的变量值
<rule>
condition = 1
thickness = eval(sprintf("%d",remap_round(max(var(size1),var(size2)),1,25000,2,6)))
radius = eval(sprintf("%fr",remap(min(var(size1),var(size2)),1,25000,0.5,0.999)))
color = eval(sprintf("spectral-11-div-%d",remap_round(scalar min(var(size1),var(size2)),1,25000,1,11)))
z = eval(int(max(var(size1),var(size2))/100))
</rule>
厚度与跨度的大小成比例,max
函数取两个断点中跨度较大的值,remap_round()
函数将大小重新映射到 [2,6]
,并赋值给 tickness
参数
对半径和颜色应用了类似的重映射,我们将颜色映射到 [1,11]
,这是 Brewer
调色板的颜色范围
z-depth
表达式根据较大的跨度将连接有效的划分为 100bp
的存储单元。首先绘制与较小块跨度相关的 link
,避免花费太多的时间来绘制单元,本例的规则也可以表示为
z = eval(int(max(var(size1),var(size2))/500))
或
z = eval(int(max(var(size1),var(size2))/1000))
可能不会对最终的图像造成太大影响
![](https://img.haomeiwen.com/i18546936/e78d7aac1aebb5c9.png)
网友评论