circos 学习手册(十六)

link 和 relationships(一)

1. 基本 links 的绘制

circos 核心用途之一就是展示轴上位置之间的关系

许多控制连接 link 的参数直接继承自 <highlights>

1.1 <links>

所有连接的数据都是在 <links> 块中定义,通常全局参数是在块根部设置,这些值将作为所有连接 <link> 的默认值

<links>

 # global parameters here

 <link>
 ...
 </link>

 <link>
 ...
 </link>

</links>

1.2 数据格式

link 数据文件的每行都是由位置对组成

...
hs1 100 200 hs2 250 300
hs1 400 550 hs3 500 750
hs1 600 800 hs4 150 350
...
1.2.1 两行格式

link 也可以跨两行定义,并使用相同的 link id,每对 linkid 都是唯一的,并保证每个 id 都有两行

...
segdup00010 hs1 100 200 
segdup00010 hs2 250 300
segdup00011 hs1 400 550
segdup00011 hs3 500 750
segdup00012 hs1 600 800
segdup00012 hs4 150 350
...

但是并不推荐这种格式,以后可能不再支持这一格式

1.2.2 link 可选参数

和高亮一样,可以添加可选字段来指定特定连接的参数

...
hs1 100 200 hs2 250 300 color=blue
hs1 400 550 hs3 500 750 color=red,thickness=5p
hs1 600 800 hs4 150 350 color=black
...

1.3 例子

在本例中,我们从重复片段定义的坐标文件中绘制数据,每个坐标定义了基因组的两个区域,作为重复片段(长度超过 1kb,相似性大于 90%

<links>

<link>
file          = data/5/segdup.txt
color         = black_a5
radius        = 0.95r
bezier_radius = 0.1r
thickness     = 1
</link>

</links>
image.png
1.3.1 自定义 karyotype

当你想要绘制的片段上的连接并不是来自同一物种的染色体时,你需要创建自己的核型文件

例如,你有 3 个大小分别为 100015002500bpcontig 时,可以创建如下文件

# karyotype.txt
chr - contig1 1 0 1000 black
chr - contig2 2 0 1500 blue
chr - contig3 3 0 2500 red

circos.conf 中使用

karyotype = karyotype.txt

你的连接文件可能是像这样的

contig1 10 20 contig2 500 520 
contig3 50 80 contig3 750 760
...

在这里,第一行定义了 contig1:10-20contig2:500-520 之间的连接

第二行定义了 contig3:50-80contig2:750-760 之间的连接

1.3.2 link 参数

基础参数如下:

  • radiuslink 终止的径向位置,设置相对值时,如果小于 1 表示相对于 ideogram 内径,否则相对于外径
  • bezier_radius — 控制贝塞尔曲线的第三个控制点(前两个由起止位置定义),未定义则使用直线
  • colorlink 线条的颜色
  • thicknesslink 线条厚度(不是 stroke_thickness
  • record_limit — 如果定义了这个参数,则从文件中读取的记录数将被限制

1.4 link 默认值

link 的默认参数值为

ribbon           = no
color            = black
thickness        = 1
radius           = 0.40r
bezier_radius    = 0r
crest                = 0.5
bezier_radius_purity = 0.75

这些值默认从 etc/tracks/link.conf 文件中导入,这个文件由 etc/housekeeping.conf 文件中的 track_defaults 参数设置

你可以见参数设置为 undef 来覆盖默认值

<link>
 ...
 crest = undef
 ...
</link>

或者

<<include etc/housekeeping.conf>>
track_defaults* = undef

1.5 贝塞尔曲线

link 可以绘制成直线或者二次贝塞尔曲线

对于后者,起始 p1 和终止 p3 控制点由坐标位置和半径参数定义,它们之间控制点 p2 由坐标和 bezier_radius 参数之间的中间点定义

绘制贝塞尔曲线时,其在 p1 处的切线由 p1-p2 定义,p3 处的切线由 p2-p3 定义

2. link 几何形状

link 的几何形状由 4 个参数定义:

  • radius
  • bezier_radius
  • bezier_radius_purity
  • crest

而在这些参数前面加上 perturb* 前缀,表示对这些参数进行随机调整

2.1 radius

radius 设置 link 终端的径向位置,可以定义为相对值或绝对值

# 50% of inner ideogram radius
radius = 0.5r 

# 50 pixels inside inner ideogram radius
radius = 1r - 50p

# 25 pixels outside inner ideogram radius
# careful - links will overlap with ideogram
radius = 1r + 25p

# links terminate 750 pixels from image center
radius = 750p

建议将半径值设置为相对值,以便后续调整

2.2 bezier_radius

bezier_radius 参数控制 link 曲率控制点的径向位置。在没有额外设置的情况下,每个 link 的控制点将位于相同的径向位置

2.3 crest

可以用 crest 参数设置两个额外的 bezier 控制点。定义后将会添加 p3p4,这些点在 link 的起止终端拥有同样的角位置

p3r,p4r = radius +/- |bezier_radius - radius| * crest

crest=0 时, p3p4p0p1 处于同样的位置,这种情况下,crest 没有效果

crest=1 时,p3p4 位于 p2 的径向位置,p2bezier_radius 设置的控制点

注意 p2p3p4 之间的区别。p2 被放置在由 p0centerp1 形成的平分角的半径上,而 p3p4 被放置在与 p0p1 相同的半径上

上面是不是看懵了,没关系,知道它干嘛的就好了

crest 参数的目的在于使 link 的终端与 ideogram 半径垂直,这个参数只有在 bezier_radius 被定义的情况下发挥作用

2.4 bezier_radius_purity

bezier_radius 参数对于所有 link 都是常量,对于确定的 bezier_radius 参数值,无论 link 的起始和终止位置如何,p2 控制点始终处于相同的位置。

这会使靠近 link 起止终端的线条高度弯曲

为了缓解这一问题,bezier_radius_purity 允许你定义一个 link 起止终端的距离函数

bezier_radius_purity 调整每个 linkp2 位置,p2 控制点将沿着原来 p2 点位置与 p0-p1 和平分半径的交点构成的直线移动

purity=1,p2'=p2,purity=0,p2'=midpoint(p0,p1)

如果定义了 bezier_radius_puritycrest 将会使用新的控制点 p'

2.5 perturb

可以使用一组参数来随机调整 bezier_radius, bezier_radius_puritycrest 参数,使 link 更有条理。

每个参数的扰动量定义为一对值:

  • pmin
  • pmax

给定扰动,新值的计算方式为

new_value = value * [ pmin + (pmax-pmin)*urd ]

其中,urd 是在 [0,1] 范围内的均匀随机偏差。因此,新值将在 [value*pmin, value*pmax] 范围内采样

例如,定义了

perturb               = yes
perturb_crest         = 0
perturb_bezier_radius = 0.5,1.2
perturb_bezier_radius_purity = 0.5,1

crest 将不受影响,将分别在其原始值的 50-120%50-100% 之间随机缩放

通过使用 pmin<0,可以使某些值强制变为负数。例如,如果 crest=0.5,那么 perturb_crest = -1,2 会使 crest[-0.5,1] 范围波动

来画张图看看

<links>

z      = 0
radius = 0.90r
crest  = 0.9
bezier_radius        = 0.9r
bezier_radius_purity = 0.5

perturb               = yes
perturb_crest         = 0
perturb_bezier_radius = 0.8,1.2
perturb_bezier_radius_purity = 0.5,1.5

<link>
color        = vvdgrey
thickness    = 2
file         = data/5/curves.repeated.txt
</link>

</links>
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容