Fork me on GitHub

Circos教程(二):基础使用

一、circos绘图流程

此处输入图片的描述
图1. Circos绘图流程
理解了circos的绘图流程,理解了每个文件的作用,基本上也就学会了circos绘图工具。

二、circos配置文件

1. 数据文件

1.1 基因组数据文件

先看文件:

1
2
3
4
5
#染色体 -   染色体编号(ID) 图显示名称(Label)     起始   结束    颜色
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
7
band    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>

## 设定 ideograms 之间的空隙
<spacing>
# 设置圈图中染色体之间的空隙大小,以下设置为每个空隙大小为周长的 0.5%
default = 0.005r

# 也可以设置指定两条染色体之间的空隙
#<pairwise hsY;hs1>
# 以下设定为两条染色体之间的空隙约为圆的 20 度角。
#spacing = 20r
#</pairwise>

</spacing>

## 设定 ideograms
# 设定 ideograms 的位置,以下设定 ideograms 在图离圆心的 90% 处
radius = 0.90r
# 设定 ideograms 的厚度,可以使用 r(比例关系) 或 p(像素)作为单位
thickness = 20p
# 设定 ideograms 是否填充颜色。填充的颜色取决于 karyotype 指定的文件的最后一列。
fill = yes
# 设定 ideograms 轮廓的颜色及其厚度。如果没有该参数或设定其厚度为0,则表示没有轮廓。
stroke_color = dgrey
stroke_thickness = 2p

## 设定 label 的显示
# 设定是否显示 label 。 label 对应着 karyotype 文件的第 4 列。如果其值为 yes,则必须要有 label_radius 参数来设定 label 的位置,否则会报错并不能生成结果。
show_label = yes
# 设定 label 的字体
label_font = default
# 设定 label 的位置
label_radius = 1r+90p
# 设定 label 的字体大小
label_size = 40
# 设定 label 的字体方向,yes 是易于浏览的方向。
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>

基因组内部不同的序列区域之间有联系,将之使用线条进行连接,从而展示到圈图上。常见的是重复序列之间的连接。将以下配置信息放入一个单独的配置文件中,给其命名 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>
# 指定 link 文件的路径,其文件格式为:
# chr1 start end chr2 start end
# hs1 465 30596 hs2 114046768 114076456
# 表明这两个染色体区域有联系,例如这个区域的序列长度>1kb且序列相似性>=90%。
file = data/5/segdup.txt
# 设置 link 曲线的半径
radius = 0.8r
# 设置贝塞尔曲线半径,该值设大后曲线扁平,使图像不太好看。
bezier_radius = 0r
# 设置 link 曲线的颜色
color = black_a4
# 设置 link 曲线的厚度
thickness = 2

<rules>
# 以下可以设置多个 rules,用来对 link 文件的每一行进行过滤或展示进行设定。每个 rule 都有一个 condition 参数;如果该 condition 为真,除非 flow=continue ,则不

# 如果 link 文件中该行数据是染色体内部的 link,则不对其进行展示
<rule>
condition = var(intrachr)
show = no
</rule>

# 设置 link 曲线的颜色与 ideogram 的颜色一致,否则为统一的颜色。
<rule>
# condition 为真,则执行该 block 的内容
condition = 1
# 设置 link 曲线的颜色为第 2 条染色体的颜色。对应这 link 文件中第 4 列数据对应的染色体的名称
color = eval(var(chr2))
# 虽然 condition 为真,但依然检测下一个 rule
flow = continue
</rule>

# 如果 link 起始于 hs1,则其 link 曲线半径为 0.99r
<rule>
condition = from(hs1)
radius1 = 0.99r
</rule>

# 如果 link 结束于 hs1,则其 link 曲线半径为 0.99r
<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/karyotype.human.txt

# 设置长度单位,以下设置表示 1M 长度的序列代表为 1u。
chromosomes_units = 1000000

# 默认设置下是将 karyotype 文件中所有的染色体都展示出来。当然,也可能根据需要仅展示指定的 chromosomes, 使用如下的参数进行设置。
chromosomes_display_default = no
# 以下参数设置指定的 chromosomes 用于展示到圈图中。// 中是一个正则表达式,匹配的 chromosomes 用于展示到圈图中。其匹配的对象是 karyotype 文件中的第 3 列。也可以直接列出需要展示的 chromosomes, 例如:hs1;hs2;hs3;hs4 。
chromosomes = /hs[1-4]$/
# chromosomes = hs1;hs2;hs3;hs4

# 以下设置各个 ideograms 的大小。其总长度为 1 ,hs1 的长度为 0.5, hs2,hs3 和 hs4 这 3 个 chromosomes 的总长度为 0.5,并且这 3 个 chromosomes 的长度是分布均匀的。注意前者的单位是 r, 后者使用了正则表达式对应多个 chromosomes, 其单位于是为 rn 。
chromosomes_scale = hs1=0.5r,/hs[234]/=0.5rn

# 使 hs2, hs3 和 hs4 在圈图上的展示方向是反向的。
chromosomes_reverse = /hs[234]/

# 设置各个 ideograms 的颜色
chromosomes_color = hs1=red,hs2=orange,hs3=green,hs4=blue

# 默认下在 ideogram block 中统一设置了 ideogram 的位置,可以使用此参数调整指定 ideogram 的位置。
chromosomes_radius = hs4:0.9r
# chromosomes_radius = hs2:0.9r;hs3:0.8r;hs4:0.7r

# karyotype 文件最后一列指定了各个 chromosomes 的颜色,而使用 chromosomes_color 参数也能修改颜色。当然,使用如下方式进行颜色的修改,则更加直观。以下方式是对颜色重新进行定义。chr1,chr2,chr3 和 chr4 对应着 karyotype 文件最后一列的值,代表着颜色的类型。此处使用 color block 来对其进行重新定义。注意重新定义的时候需要加符号 *
<colors>
chr1* = red
chr2* = orange
chr3* = green
chr4* = blue
</colors>

### 绘制 plot 图
<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添加。

热评文章