link 和 relationships(四)
8. link rules - Part V
在前面的示例中,我们根据 link
或数据点的位置来调整它们的格式参数。在下面的例子中,我们将展示如何根据格式参数的值出发规则。
本例的输入数据集是重复片段的自己,我们通过将下列格式参数随机分配给数据行来格式化 link
color = red
color = blue
thickness = 5
输入的数据是这样的
segdup00002 hs1 486 76975
segdup00002 hs15 100263879 100338121
segdup00011 hs1 71096 76975 thickness=5
segdup00011 hs1 388076 393885 thickness=5
...
segdup00062 hs1 120975 125718 color=blue
segdup00062 hs1 220708073 220712741 color=blue
segdup00071 hs1 129327 166636 color=red
segdup00071 hs1 665046 702417 color=red
...
包含四种连接:
- 无格式
- 红色
- 蓝色
- 厚度 5
下面展示如何编写基于格式参数调整 link
参数的规则。
<rule>
condition = var(thickness) == 4
condition = rand() < 0.25
thickness = 10
color = green
z = 15
</rule>
<rule>
condition = var(color) eq "red"
thickness = 4
z = 10
flow = restart
</rule>
<rule>
condition = var(color) ne "grey" && var(thickness) == 2
z = 5
</rule>
第一个规则适用于厚度为 4
的连接,并将其厚度指定为 10
,颜色指定为绿色,z-depth
设置为 15
。第二个条件指定应用范围为这些 link
的 25%
第二个规则设置红色连接的厚度和深度,然后重新启动规则链,使更厚的红色连接在第一个规则中进一步被修改,然后在第二个循环,为了避免无限循环,规则只能重新启动规则链一次
最后一个规则设置厚度为 2
且颜色为灰色的连接的深度。
9. ribbons
在前面所有的示例中,连接都被绘制为均匀厚度的曲线,厚度是通过参数设置的,与 link
文件中定义的跨度大小无关。
因此,尽管线条的粗细可以单独设置为某个像素值,但从根本上说,通过简单曲线对 link
的显示并不能传达 link
间距的大小
9.1 正常 VS 丝带(ribbon)
正常的 link
是贝塞尔曲线,其控制点可使用 bezier_radius
和 crest
参数进行定义。曲线两端位于每个跨度中间。
当连接变成丝带时,连接的厚度是可变的,可以在整个长度上平滑缩放。你可以使用以下方式将连接切换为丝带
ribbon = yes
在 link
的每端,丝带的厚度与相应的连接跨度大小相同
9.2 格式化丝带
一旦连接变成丝带,你可以使用 stroke_color
和 stroke_thickness
参数来勾勒连接的轮廓
调整丝带的深度是在分层数据中非常有效的,丝带的交织,在视觉上很吸引人
10. ribbon twists
ribbon
丝带将绘制为填充路径,路径的角点是由 link
的跨度的起始和终止位置
linkID chr1 start1 end1
linkID chr2 start2 end2
丝带路径的绘制方向是
>> start1 >> end1 >> end2 >> start2 >>
| |
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
请注意,link
的跨度的起始和结束位置由路径连接
因此,根据与 link
相关的 ideogram
的方向以及起始终止坐标的方向,色带可能会发生扭曲
10.1 通过 ideogram 方向控制条带的扭转
控制条带扭转的方法是调整 ideogram
的方向。当你在 ideogram
对之间有连接时,这种方法非常有效
如果你的连接在两个 ideogram
上的方向相同(即 start1>end1,start2>end2
),那么如果 ideogram
的方向相同,条带就会扭曲。解开条带扭曲的方式是调整第二个 ideogram
的方向
chromosomes_reverse = hs2
10.2 通过 flat 参数删除扭转
如果你要解开所有条带的扭转,而不管其 ideogram
的方向或者它们的相对起始、终止位置如何,可以设置 flat
参数
<link>
ribbon = yes
flat = yes
...
</link>
在设置了 flat
参数时,对 ideogram
的前进和方向的任何调整都不会对条带产生影响,条带的绘制总是不缠绕的
也可以将 flat
参数单独添加到文件中
linkID chr1 start1 end1 flat=yes
linkID chr2 start2 end2 flat=yes
10.3 使用 twist 强制扭转
如果你就是想要扭转所有的条带,而不管其 ideogram
的方向或它们的相对起始、终止位置,可以设置 twist
参数
<link>
ribbon = yes
twist = yes
...
</link>
和 flat
一样,不管如何,条带总是扭转的,也可以在文件中设置
linkID chr1 start1 end1 twist=yes
linkID chr2 start2 end2 twist=yes
10.4 使用方向坐标添加扭转
flat
和 twist
指定了条带的扭转状态。当你需要特定的扭转状态时,非常有用。
而另一种合并扭转的方法是定义反向坐标,因此
linkID chr1 start1 end1
linkID chr2 start2 end2
变成了
linkID chr1 end1 start1
linkID chr2 start2 end2
或者,你希望始终保持起点坐标小于终点坐标,可以使用 inversed=1
link1 hs1 10 20 inverted=1 # this inverts role of start/end for this span (now start=20 end=10)
link1 hs2 10 20