一、circos绘图流程
图1. Circos绘图流程
理解了circos的绘图流程,理解了每个文件的作用,基本上也就学会了circos绘图工具。
二、circos配置文件
1. 数据文件
1.1 基因组数据文件
先看文件:1
2
3
4
5
chr - Gmax01 1 0 56831624 chr1
chr - Gmax02 2 0 48577505 chr2
chr - Gmax03 3 0 45779781 chr3
…
讲解一下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18染色体 chr,这一列定义表面这是一个染色体
- 短线占位符,这个占位符通常用来定义所属关系,对于染色体来说,没有所属
染色体编号 ID,ID是染色体唯一且不能重复的标识。如果一个染色体组型文件里面包含多个不同来源的染色体组,设置ID最好的办法就是使用前缀。
比如hs=homo sapiens, mm=mus musculus等等。有时候你可以使用hs19做为前缀来明示数据来源版本。
其实,即使是只有一个来源的染色体组,也最好使用前缀,以规范文件格式。
比如上面的示例,就是我绘图的大豆的基因组,因而我在设置染色体编号(ID)的时候,使用了Gmax01 …的格式,自己可以根据自己的染色体来设置。
图显名称 Label,是将来用于显示在图上的文本。Label主要是在图中显示的名称,我这里就直接使用1,2, …表示,
但是如果有多个物种的基因组,或者来自不同的样品,品系的,还是要加以区分。
起始、结束 START和END值,定义了染色体的大小。
对于染色体组型文件,需要指明的是,这里的START和END应该是染色体本身的大小,而不是你想绘制部分的起止位置。
指定绘制部分将由其它文件来定义。
颜色 COLOR,是于定义显示的颜色。如果染色体组不以条纹(cytogenetic bands)图谱覆盖的话,那么就会以这里设置的颜色显示。
对于人类基因组而言,circos预设了与染色体相同的名字做为颜色名,比如chr1, chr2, … chrX, chrY, chrUn.
关于染色体上加上条纹图谱的信息,可以参考《Circos系列教程(二)染色体示意图ideograms 》,这里方便,也移植过来了:
一般的,我们都会在染色体组型文件当中加上条纹图谱的信息,这样才会让染色体图谱看上去有被染色的效果。文件格式与之前的一致,也只有七列。这里的DOMAIN就是染色体组型当中的ID就好了,其它的定义与前面的一致。下面就是一个例子。1
2
3
4
5
6
7band DOMAIN ID LABEL START END COLOR
band hs1 p36.33 p36.33 0 2300000 gneg
band hs1 p36.32 p36.32 2300000 5400000 gpos25
band hs1 p36.31 p36.31 5400000 7200000 gneg
band hs1 p36.23 p36.23 7200000 9200000 gpos25
band hs1 p36.22 p36.22 9200000 12700000 gneg
...
cytogenetic bands的名称例子:1p36.33
其命名规则是之前的数字、字母为染色体代号,一般是数字或者X,Y。而之后会有字母p或者q。p代表短臂,q代表长臂。而每个band都会有颜色深浅的不同,这里主要以gpos和gneg来区别。为了和真实值更接近,circos还定义了一系列的灰度。
图2. 染色体组型定义
1.2 feature数据文件
刚才说完了基因组的数据文件,下面说一下其他的数据文件,我这里做了SNP的密度显示track,那么就拿这样一个track来做一个示例:1
2
3
4
5
6#染色体编号 起始位置 终止位置 value
Gmax01 0 999999 0.000301
Gmax01 1000000 1999999 0.001321
Gmax01 2000000 2999999 0.001050
Gmax01 3000000 3999999 0.003027
...
解释一下:1
2
3这里的染色体编号一定要与基因组信息文件中的染色体编号保持一致,不然绘图的时候会出错;
起始位置、终止位置,这是你要统计的这个区段的的范围;
value,则是值,根据情况,比如我这里是统计的SNP的密度,那么这个值就是在这个染色体区段范围类,染色体的密度,如果是统计数量,那么这个值就是数目。
每个track都有自己对应的数据,而且不同的绘图类型,所需要的数据结构可能都不一样,这是你就需要根据自己的需求来准备数据文件了。
不同显示数据的track对应的数据文件的格式,其实数据的格式都很好理解,如果你想绘制什么样的图,可以在官网上找到相关的数据类型结构,你只要根据这个结构来做好你的数据,就没什么问题。
2. 配置文件
一般绘图需要以下配置文件:
- circos.conf
- ideogram.conf
- ticks.conf
- image.conf
- highlight.conf
- colors_fonts_patterns.conf
你可以将配置文件内容全部放在circos.conf里,也可以分离成单独的文件通过include方式导入。
为了使用,阅读和读取的方便,我们还是建议最好分离成单独的文件。
那么我们就一个一个的配置文件说起,最后说主配置文件circos.conf
因为有很多人已经在这方面有了很详细的注解和心得,我也就不自己一个个来翻译,注释和配置了,这里主要引用来自陈连福《Circos的安装和简单使用》
2.1 ideogram block 显示染色体
将染色体在圈图上展示出来,代表每个染色体的图形,称为ideogram。将以下配置信息放入一个单独的配置文件中,给其命名 ideogram.conf 。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39<ideogram>
<spacing>
default = 0.005r
</spacing>
radius = 0.90r
thickness = 20p
fill = yes
stroke_color = dgrey
stroke_thickness = 2p
show_label = yes
label_font = default
label_radius = 1r+90p
label_size = 40
label_parallel = yes
</ideogram>
2.2 ticks block 以刻度形式显示染色体大小
将染色体的大小以刻度的形式在圈图上展示出来。将以下配置信息放入一个单独的配置文件中,给其命名 ticks.conf 。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40# 是否显示 ticks
show_ticks = yes
# 是否显示 ticks 的 lables
show_tick_labels = yes
## 设定 ticks
<ticks>
## ticks 的设置
# 设定 ticks 的位置
radius = 1r
# 设定 ticks 的颜色
color = black
# 设定 ticks 的厚度
thickness = 2p
# 设定 ticks' label 的值的计算。将该刻度对应位置的值 * multiplier 得到能展示到圈图上的 label 值。
multiplier = 1e-6
# label 值的格式化方法。%d 表示结果为整数;%f 结果为浮点数; %.1f 结果为小数点后保留1位; %.2f 结果为小数点后保留2位。
format = %d
## 以下设置了 2 个 ticks,前者是小刻度,后者是大刻度。
<tick>
# 设置每个刻度代表的长度。若其单位为 u,则必须要设置 chromosomes_units 参数。比如设置 chromosomes_units = 1000000,则如下 5u 表示每个刻度代表 5M 长度的基因组序列。
spacing = 5u
# 设置 tick 的长度
size = 10p
</tick>
<tick>
spacing = 25u
size = 15p
# 由于设置的是大刻度,以下用于设置展示 ticks' label。
show_label = yes
# 设置 ticks' label 的字体大小
label_size = 20p
# 设置 ticks' label 离 ticks 的距离
label_offset = 10p
format = %d
</tick>
</ticks>
2.3 links block 以曲线连接显示基因组内部区域之间的联系
基因组内部不同的序列区域之间有联系,将之使用线条进行连接,从而展示到圈图上。常见的是重复序列之间的连接。将以下配置信息放入一个单独的配置文件中,给其命名 links.conf 。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53<links>
<link>
file = data/5/segdup.txt
radius = 0.8r
bezier_radius = 0r
color = black_a4
thickness = 2
<rules>
<rule>
condition = var(intrachr)
show = no
</rule>
<rule>
condition = 1
color = eval(var(chr2))
flow = continue
</rule>
<rule>
condition = from(hs1)
radius1 = 0.99r
</rule>
<rule>
condition = to(hs1)
radius2 = 0.99r
</rule>
</rules>
</link>
</links>
2.4 plots block 以直方图形式展示数据
将基因组序列的GC含量,表达量等以直方图的形式在圈图中展示出来。将以下配置信息放入一个单独的配置文件中,给其命名 plots_histogram.conf 。以下作了两个直方图,并对分别添上背景或网格线。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93<plot>
# 设定为直方图
type = histogram
# 数据文件路径,为 4 列:
# chromosome start end data
# hs1 0 1999999 180.0000
file = data/5/segdup.hs1234.hist.txt
# 设置直方图的位置,r1 要比 r0 大。直方图的方向默认为向外。
r1 = 0.88r
r0 = 0.81r
# 直方图的填充颜色
fill_color = vdgrey
# 默认下直方图轮廓厚度为 1px,若不需要轮廓,则设置其厚度为0,或在 etc/tracks/histogram.conf 中修改。
thickness = 0p
# 直方图是由 bins (条行框)所构成的。若 bins 在坐标上不相连,最好设置不要将其bins连接到一起。例如:
# hs1 10 20 0.5
# hs1 30 40 0.25
# 上述数据设置值为 yes 和 no 时,图形是不一样的。
extend_bin = no
# 以下添加 rule ,不在 hs1 上添加直方图。
<rules>
<<include exclude.hs1.rule>>
</rules>
# 设定直方图的背景颜色
<backgrounds>
show = data
<background>
color = vvlgrey
</background>
<background>
color = vlgrey
y0 = 0.2r
y1 = 0.5r
</background>
<background>
color = lgrey
y0 = 0.5r
y1 = 0.8r
</background>
<background>
color = grey
y0 = 0.8r
</background>
</backgrounds>
</plot>
<plot>
type = histogram
# 此处直方图的数据文件第 4 列是多个由逗号分割的数值,需要制作叠加的直方图。
file = data/5/segdup.hs1234.stacked.txt
r1 = 0.99r
r0 = 0.92r
# 给 4 个值按顺序填充不同的颜色
fill_color = hs1,hs2,hs3,hs4
thickness = 0p
orientation = in
extend_bin = no
<rules>
<<include exclude.hs1.rule>>
</rules>
# 在直方图中添加坐标网格线
<axes>
show = data
thickness = 1
color = lgrey
<axis>
spacing = 0.1r
</axis>
<axis>
spacing = 0.2r
color = grey
</axis>
<axis>
position = 0.5r
color = red
</axis>
<axis>
position = 0.85r
color = green
thickness = 2
</axis>
</axes>
</plot>
2.5 plots block 以热图形式显示数据
基因组一个区域内有多组数据时,适合以热图形式显示数据。比如基因表达量。将以下配置信息放入一个单独的配置文件中,给其命名 plots_heatmap.conf 。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96<plot>
# 绘制 heat map
type = heatmap
# 设定数据文件路径。文件有 5 列
# chrID start end data class
# hs1 0 1999999 113.0000 id=hs1
# hs1 0 1999999 40.0000 id=hs4
# hs1 0 1999999 20.0000 id=hs2
# hs1 0 1999999 7.0000 id=hs3
file = data/5/segdup.hs1234.heatmap.txt
# 设定图形所处位置
r1 = 0.89r
r0 = 0.88r
# 设定热图的颜色。颜色为 hs3 ,以及相应带不同透明程度的 5 种颜色。
color = hs1_a5,hs1_a4,hs1_a3,hs1_a2,hs1_a1,hs1
# 设定 scale_log_base 参数。计算颜色的方法如下:
# f = (value - min) / ( max - min ) 热图中每个方块代表着一个值,并给予相应的颜色标示。一系列的值 [min,max] 对应一系列的颜色 c[n], i=0..N
# n = N * f ** (1/scale_log_base)
# 由上面两个公式计算出代表颜色的 n 值。
# 若 scale_log_base = 1,则数值与颜色的变化是线性的;
# 若 scale_log_base > 1,则颜色向小方向靠近;
# 若 scale_log_base < 1,则颜色向大方向靠近。
scale_log_base = 5
<rules>
<<include exclude.hs1.rule>>
# 仅显示 id = hs1 的数据
<rule>
condition = var(id) ne "hs1"
show = no
</rule>
</rules>
</plot>
<plot>
type = heatmap
file = data/5/segdup.hs1234.heatmap.txt
r1 = 0.90r
r0 = 0.89r
color = hs2_a5,hs2_a4,hs2_a3,hs2_a2,hs2_a1,hs2
scale_log_base = 5
<rules>
<<include exclude.hs1.rule>>
<rule>
condition = var(id) ne "hs2"
show = no
</rule>
</rules>
</plot>
<plot>
type = heatmap
file = data/5/segdup.hs1234.heatmap.txt
r1 = 0.91r
r0 = 0.90r
color = hs3_a5,hs3_a4,hs3_a3,hs3_a2,hs3_a1,hs3
scale_log_base = 5
<rules>
<<include exclude.hs1.rule>>
<rule>
condition = var(id) ne "hs3"
show = no
</rule>
</rules>
</plot>
<plot>
type = heatmap
file = data/5/segdup.hs1234.heatmap.txt
r1 = 0.92r
r0 = 0.91r
color = hs4_a5,hs4_a4,hs4_a3,hs4_a2,hs4_a1,hs4
scale_log_base = 5
<rules>
<<include exclude.hs1.rule>>
<rule>
condition = var(id) ne "hs4"
show = no
</rule>
</rules>
</plot>
2.6 plots block 以文本形式显示数据
若需要在圈图上显示一些基因的名称,此时需要以文本形式显示数据。将以下配置信息放入一个单独的配置文件中,给其命名 plots_text.conf 。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38<plot>
# 表示出文字
type = text
# 数据文件路径
file = data/6/genes.labels.txt
# 显示在图形中的位置
r1 = 0.8r
r0 = 0.6r
# 标签的字体
label_font = light
# 标签大小
label_size = 12p
# 文字边缘的大小,设置较小则不同单词就可能会连接到一起了。
# padding - text margin in angular direction
# rpadding - text margin in radial direction
rpadding = 5p
# 设置是否需要在 label 前加一条线,用来指出 lable 的位置。
show_links = no
link_dims = 0p,2p,5p,2p,2p
link_thickness = 2p
link_color = black
<rules>
<<include exclude.hs1.rule>>
# 设置 rule ,对 label 中含有字母 a 或 b 的特异性显示
<rule>
condition = var(value) =~ /a/i
label_font = bold
flow = continue
</rule>
<rule>
condition = var(value) =~ /b/i
color = blue
</rule>
</rules>
</plot>
2.7 rules block 放置常用的规则配置
本例子中,很多track没有在1号染色体上展示,需要设置如下规则信息,将之写入到文件 exclude.hs1.rule 中1
2
3
4<rule>
condition = on(hs1)
show = no
</rule>
2.8 主配置文件
在主配置文件 circos.conf 中,包含以上所需要的配置文件信息,则可以画出所需要的track。此外,可以设置一些全局的设置。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
karyotype = data karyotype.human.txt
chromosomes_units = 1000000
chromosomes_display_default = no
chromosomes = /hs[1-4]$/
chromosomes_scale = hs1=0.5r,/hs[234]/=0.5rn
chromosomes_reverse = /hs[234]/
chromosomes_color = hs1=red,hs2=orange,hs3=green,hs4=blue
chromosomes_radius = hs4:0.9r
<colors>
chr1* = red
chr2* = orange
chr3* = green
chr4* = blue
</colors>
<plots>
<<include plots_histogram.conf>>
<<include plots_heatmap.conf>>
<<include plots_text.conf>>
</plots>
<<include ideogram.conf>>
<<include ticks.conf>>
<<include links.conf>>
<image>
<<include etc/image.conf>>
</image>
<<include etc/colors_fonts_patterns.conf>>
<<include etc/housekeeping.conf>>
circos配置的单位概念
一共有4种单位:p, r, u, b
p表示像素,1p表示1像素
r表示相对大小,0.95r表示95% ring 大小。
u表示相对chromosomes_unit的长度,如果chromosomes_unit = 1000,则1u就是千分之一的染色体长度。
b表示碱基,如果染色体长1M,那么1b就是百万分之一的长度。
三、circos运行命令
对配置文件设置完毕后,使用命令进行画图1
$ ./bin/circos -conf circos.conf
四、结果示例
结果如下:
此图来自陈连福:《Circos的安装和简单使用》
这里也展示下,我第一次绘图,主要是统计分析了SNP,InDel在染色体上的分布情况:
其中的一些文字名和右下角的图色块显示说明为PS添加。