前几篇笔记记录了如何用circos画出带有刻度以及刻度标签的染色体骨架。这篇笔记来学习如何在这个圆圈里添加其他的Data信息。首先我们跟着官网教程来练习添加lines。官网:here
Links代表了两个基因组位置之间的联系(比如相似性、不同、或者fusion等等),这个联系是通过一条曲线或者直线来表示的。
Links可视化的格式可以使用rules来设置,rules组成一个表达式的决策树,对每个link进行评估。根据数据值测试links,根据位置、大小或其他参数来动态的改变其展示方式。
Links的数据在<link> blocks里设置。Links从一个定义的径向位置开始,并在bezier_radius定义的径向位置上有它们的控制点(调整曲率)。比如在我们最开始下载的示例数据文件夹data/5/segdup.txt这个文件:
$ head segdup.txt
hs1 465 30596 hs2 114046768 114076456
hs1 486 76975 hs15 100263879 100338121
hs1 486 30596 hs9 844 30515
hs1 486 9707 hsY 57762276 57771573
hs1 486 9707 hsX 154903076 154912373
hs1 486 9707 hs16 427 9533
hs1 8256 76975 hs19 11001 79672
hs1 23908 30596 hs12 17641 24322
hs1 59871 76975 hs6 5001 22075
hs1 71096 76975 hs6 170824311 170830148
举个例子:在你设置文件的时候就应该这样写:
<links>
<link>
file = data/5/segdup.txt
radius = 0.8r
bezier_radius = 0r
color = black_a4
thickness = 2
</link>
</links>
在Rule块可以被添加到任何links block或者plot blocks里,并且形成一个决策链,用来更改如何展示data,是线条,柱形图,还是散点图等等,一般格式是:
<rules>
<rule>
...
</rule>
<rule>
...
</rule>
...
</rules>
每一个rule有一个条件、格式化语句和一个可选的flow statement。如果条件为true,则将这个rule应用于数据点,不再检查其他规则(除非flow=continue)。如果条件为false,则检查下一个rule。
var(X)指的是数据点的变量X的值。这里intrachr是指染色体内的:
<rule>
condition = var(intrachr)
# Any links that are intra-chromosomal will not be shown. Further rules are not tested.
show = no
</rule>
rules是按照顺序运行的。你可以通过向上移动block或添加importance参数,在决策树中向上移动rules。首先是带有importance参数的rules被运行,然后依次运行不带参数的rules:
<rules>
<rule>
# 2nd
</rule>
<rule>
# 3rd
</rule>
<rule>
# 1st
importance = 10
</rule>
</rules>
示例脚本
circos.conf主要配置文件:
karyotype = data/karyotype/karyotype.human.txt
chromosomes_units = 1000000
chromosomes_display_default = no
chromosomes = /hs[1-4]$/
chromosomes_reverse = /hs[234]/
chromosomes_scale = hs1=0.5r,/hs[234]/=0.5rn
chromosomes_radius = hs4:0.9r
# 在上一篇笔记里,我们是在ideogram.conf更改染色体颜色的,现在我们用第二种方法来更改染色体颜色:
# 星号的后缀代表覆盖颜色,可以覆盖colors_fonts_patterns.conf文件里的设置
<colors>
chr1* = red
chr2* = orange
chr3* = green
chr4* = blue
</colors>
<links> #links的开头
<link>
file = data/5/segdup.txt
radius = 0.8r #从径向位置的0.8r处开始线条
bezier_radius = 0r
color = black_a4
thickness = 2
<rules># 在links块里添加rules
<rule> #第一个rule开始
condition = var(intrachr) #条件是:在同一染色体内
# 任何在同一染色体内的links都不会被展示
show = no
</rule> #第一个rule结束
<rule> #第二个rule
#这个rule是针对剩下的不在同一染色体内的links,condition=1代表条件始终是true
condition = 1
#设置links的线条颜色,所有结尾落在2号染色体上的links的颜色,和2号染色体本身的颜色一致
color = eval(var(chr2))
#在执行完这一个rule后,继续检查下一个rule,所以设置continue:
flow = continue
</rule>#第二个rule结束
<rule>#第三个rule
# 如果links从1号染色体开始:
condition = from(hs1)
# 那么links的起始点要非常靠近染色体骨架,0.99r
radius1 = 0.99r
</rule> #第三个rule结束
<rule>#第四个rule
# 如果links的结束点在1号染色体:
condition = to(hs1)
# 那么links的结束点要非常靠近染色体骨架,对同一个染色体进行设置,要用radius2:
radius2 = 0.99r
</rule>#第四个rule结束
</rules>#所有的rule结束
</link> #link结束
</links> #links的结尾
<<include ideogram.conf>>
<<include ticks.conf>>
<image>
<<include etc/image.conf>>
</image>
<<include etc/colors_fonts_patterns.conf>>
<<include etc/housekeeping.conf>>
ideogram.conf脚本(与上一篇笔记里的差不多):
<ideogram>
<spacing>
default = 0.005r
</spacing>
# Ideogram position, fill and outline
radius = 0.90r
thickness = 20p
fill = yes
stroke_color = dgrey
stroke_thickness = 2p
# Minimum definition for ideogram labels.
show_label = yes
# see etc/fonts.conf for list of font names
label_font = default
label_radius = 1.075r # if ideogram radius is constant, and you'd like labels close to image edge,
# use the dims() function to access the size of the image
# label_radius = dims(image,radius) - 60p
label_size = 30
label_parallel = yes
</ideogram>
ticks.conf脚本(与上一篇笔记里的差不多):
show_ticks = yes
show_tick_labels = yes
<ticks>
radius = 1r
color = black
thickness = 2p
multiplier = 1e-6
format = %d
<tick>
spacing = 5u
size = 10p
</tick>
<tick>
spacing = 25u
size = 15p
show_label = yes
label_size = 20p
label_offset = 10p
format = %d
</tick>
</ticks>
运行circos.conf:
$ circos -conf ./circos.conf -outputdir ./ -outputfile tutorial_1_4_practice.png
$ xdg-open tutorial_1_4_practice.png