circos是用来展示数据的绘图工具,其数据展示方式主要通过配置文件来决定。不同的展示方式可通过不同的配置文件来进行设置,如染色体整体展示,添加刻度,柱状图,热图,添加文本标签,连线显示联系等。
circos的绘图方式与ggplot或ps相似,都有一些图层叠加的概念于其中,即图形中的每一部分都是通过其中的一个配置文件来设置的,最后将这些单个展示的配置文件加入主配置文件,叠加生成最后的输出图。配置文件的语法有些类似与html格式。
本文主要简要记录circos通过多环柱状图的绘制来展示比较基因组(多个叶绿体基因组变异信息比较)的结果。内容包括ideogram,ticks,text,histogram,links等图型元素。
1、ideogram 配置
将染色体在圈图上展示出来,代表每个染色体的图形,称为ideogram。将以下配置信息放入一个单独的配置文件中,命名为ideogram.conf。
<ideogram>
## 设置ideogram之间的间隙
<spacing>
# 设置ideogram之间的间隙大小,以下设置为每个间隙大小为周长的0.1%
default = 0.001r
# 也可设置指定的两条染色体之间的间隙
# <pairwise chrA01;chrA02>
# 以下设置两条染色体之间的间隙为圆的20度角
# spacing = 20r
# </pairwise>
</spacing>
## 设置ideogram
# 设置ideogram的位置,以下设置为ideogram在离圆心90%处
radius = 0.90r
thickness = 6p
# 设置ideogram是否填充颜色,填充的颜色取决于karyotype指定的文件的最后一列
fill = yes
# 设置ideogram轮廓的颜色及其厚度。如果没有该参数或设定其厚度为0,则表示没有轮廓
stroke_color = dgrey
stroke_thickness = 3p
## 设置label的显示信息
# 设置是否显示label信息,label信息对应karyotype文件的第四列,如果其值为yes,则必须要有label_radius参数来设置label的位置,否则会报错无法生成结果
show_label = yes
label_radius = dims(ideogram,radius) + 0.075r
# 设置label字体
#label_font = 40
# 设置label字体大小
label_size = 10
# 设置label的字体方向,yes为易于浏览的方向
#label_parallel = yes
</ideogram>
其中叶绿体基因组的输入数据文件信息格式为:
chr - Chloroplast Chloroplast 0 147050 black
# 第一列通常是“chr”,是对染色体的描述;
# 第二列通常是“-”;
# 第三列为染色体ID;
# 前三列信息不会展示在图像中,但却是必须的;
# 第四列是染色体的标签,也即名字,可展示在图像中;
# 第五列是起始位置;
# 第六列是结束位置;
# 第七列是染色体或band的颜色
2、ticks 配置
将染色体的大小以刻度的形式在圈图上展示出来,将以下配置信息放入到一个独立的配置文件中,命名为ticks.conf。
# 是否显示ticks
show_ticks = yes
# 是否显示ticks的labels
show_ticks_labels = yes
## 设置ticks
<ticks>
# 设置ticks的位置
radius = dims(ideogram,radius_outer)
label_offset = 5p
orientation = out
# 设置ticks的颜色
color = black
# 设置ticks的厚度
thickness = 2p
# 设置ticks label的值的计算,将改刻度时对应的值*multiplier得到展示到全图上的label值
multiplier = 1e-6
# label值的格式化方法,%d表示结果为整数;%f表示结果为浮点数,%.nf表示结果保留小数点后n位
format = %d
## 以下设置了2个ticks,前者是小刻度,后者是大刻度
<tick>
# 设置每个刻度代表的长度,若其单位为u,则必须要设置chromosome_units参数,比如设置chromosome_units=1000000,则如下5u表示每个刻度代表5M长度的基因组序列
spacing = 1u
show_label = yes
color = lgrey
label_size = 10p
format=%d
# 设置tick的长度
size = 10bp
</tick>
<tick>
spacing = 5u
size = 15p
# 由于设置的是大刻度,以下用于设置展示tick's label
show_label = yes
# 设置ticks's label离ticks的距离
label_offset = 10p
label_size = 20p
format = %d
</tick>
</ticks>
奇怪的是,上面的设置最后图像并未显示刻度的数字,目前还还没找到原因。
3、histogram 配置 (gene)
将基因组序列中的GC含量、表达量等以直方图的形式在圈图中展示出来,将以下配置信息放入到一个单独的配置文件中,命名为plots_histgram_gene.conf,下面绘制了多个直方图,并分别添加背景。
输入文件格式如下:
Chloroplast 4110 4184 1 fill_color=green
Chloroplast 6611 7378 1 fill_color=yellow
Chloroplast 8867 9170 1 fill_color=yellow
Chloroplast 16343 16414 -1 fill_color=green
Chloroplast 16645 18136 -1 fill_color=red
Chloroplast 18447 19470 -1 fill_color=green
...
# 第一列为染色体ID,与ideogram输入数据文件中的染色体ID要一致;
# 第二列为起始位置;
# 第三列为终止位置;
# 第四列为柱状图的高度,这里设置1,-1是为了方便后面设置柱状图朝内还是朝外;
# 第五列为可选的,设置color=red,通过配置文件中设置fill=yes画柱状图的边框为红色。这里设置的fill_color=颜色表示柱状图的填充颜色
基因,tRNA,rRNA绘制的配置文件:
# 将叶绿体基因组中的基因,tRNA,rRNA在图上展示出来,其中基因组环内的为负链上的基因,基因组环外的为正链上的基因
# 此部分需要对叶绿体注释文件进行处理,基因,tRNA,rRNA分别使用不同的颜色表示
<plot>
# 设置直方图
type = histogram
# 数据文件路径
file = mydata/anno.hist
# 设置直方图的位置,r1要比r0大,直方图方向默认为向外
r1 = 1.03r
r0 = 0.97r
max = 1
min = -1
orientation = out
# 填充颜色
fill = yes
fill_color = yes
# 设置直方图轮廓,默认为1px
thickness = 1p
# 直方图是由bins构成的,若bins在坐标轴上不相连,最好设置不要将bins连到一起
extend_bin = no
</plot>
4、text 配置
若需要在圈图上显示基因名称,需要以文本形式展示,将以下配置信息放入到一个单独的配置文件中,命名为plots_text.conf。这里分别使用两个配置文件标注正负链上的基因名称,分别命名为plot_text_reverse.conf和plot_text_forward.conf当然也可以将其合并为一个文件。
其输入文件格式如下:
Chloroplast 144 515 rpl14
Chloroplast 627 2218 rpl16
Chloroplast 2367 3086 rps3
Chloroplast 3148 3597 rpl22
Chloroplast 3696 3977 rps19
Chloroplast 4240 5724 rpl2
Chloroplast 5743 6024 rpl23
Chloroplast 6199 6272 trnI
Chloroplast 9957 10037 trnL
Chloroplast 10669 12913 ndhB
...
# 第一列为染色体ID,与ideogram输入数据文件中的染色体ID要一致;
# 第二列为起始位置;
# 第三列为终止位置;
# 第四列为要标注到图上的名称
plot_text_forward.conf 文件配置信息:
<plot>
# 表示文字
type = text
# 数据文件路径
file = mydata/forward.text
# 显示在图形中的位置
r1 = 1.2r
r0 = 1.03r
# 标签的字体
label_font = light
# 标签大小
label_size = 16p
# 文件边缘的大小,设置较小则不同的单词可能会连在一起
# padding - text margin in angular direction
# rpadding - text margin in radial direction
rpadding = 0p
padding = 0p
label_snuggle = yes
max_snuggle_distance = 2r
snuggle_sampling = 2
snuggle_tolerance = 0.25r
#snuggle_link_overlap_test = yes
snuggle_link_overlap_tolerance = 2p
#snuggle_refine = yes
# 设置是否需要在label前加一条线用来指出label的位置
show_links = yes
links_dims = 0p,2p,5p,2p,2p
link_thickness = 2p
link_color = black
</plot>
plot_text_reverse.conf 文件配置信息:
<plot>
# 表示文字
type = text
# 数据文件路径
file = mydata/reverse.text
# 显示在图形中的位置
r1 = 1.2r
r0 = 1.0r
# 标签的字体
label_font = light
# 标签大小
label_size = 16p
# 文件边缘的大小,设置较小则不同的单词可能会连在一起
# padding - text margin in angular direction
# rpadding - text margin in radial direction
rpadding = 0p
padding = 0p
label_snuggle = yes
max_snuggle_distance = 2r
snuggle_sampling = 2
snuggle_tolerance = 0.25r
#snuggle_link_overlap_test = yes
snuggle_link_overlap_tolerance = 2p
#snuggle_refine = yes
# 设置是否需要在label前加一条线用来指出label的位置
show_links = yes
links_dims = 0p,2p,5p,2p,2p
link_thickness = 2p
link_color = black
</plot>
5、histogram 配置(变异信息配置)
这里的配置文件与上面的histogram配置大体相似,不同的是这里的每一个plot画的柱状图都是一个朝向。同一个物种叶绿体基因组的snp数量信息都是朝着内部的,而indel则是朝内,snp使用一个<plot>...</plot>
,而indel信息同样使用一个<plot>...</plot>
。为方便直观的比较多个基因组的变异信息,需要先找出所有物种中所有window(这里的500bp为一个window计算其中的snp和indel数量)内的最大变异数量,以方便在配置文件中设置max值,也即柱状图的最大值。
其中一个物种的snp数据的输入文件如下:
Chloroplast 0 500 29 fill_color=lgrey
Chloroplast 500 1000 25 fill_color=lgrey
Chloroplast 1000 1500 39 fill_color=lgrey
Chloroplast 1500 2000 42 fill_color=lgrey
Chloroplast 2000 2500 37 fill_color=lgrey
Chloroplast 2500 3000 25 fill_color=lgrey
...
# 第一列为染色体ID,与ideogram输入数据文件中的染色体ID要一致;
# 第二列为起始位置;
# 第三列为终止位置;
# 第四列为当前window的snp数量;
# 第五列为柱状图的填充颜色
indel数据输入与snp输入相同,因此不在细述。
下面是一个物种的snp和indel变异信息的配置文件:
########################################################################
<plot>
# 设置直方图
type = histogram
# 数据文件路径
file = mydata/Hordeum.snp.count.hist
# 设置直方图的位置,r1要比r0大,直方图方向默认为向外
r1 = 0.78r
r0 = 0.72r
max = 60
min = 0
orientation = out
# 填充颜色
fill = yes
fill_color = yes
# 设置直方图轮廓,默认为1px
thickness = 1p
# 直方图是由bins构成的,若bins在坐标轴上不相连,最好设置不要将bins连到一起
extend_bin = no
# 添加背景
<backgrounds>
<background>
background_stroke_color = dark
color = vvlblue
</background>
</backgrounds>
# 添加坐标轴
<axes>
show = data
thickness = 1
color = lblue
<axis>
spacing = 0.2r
</axis>
</axes>
</plot>
#############################################################################
<plot>
# 设置直方图
type = histogram
# 数据文件路径
file = mydata/Hordeum.500.indel.count.hist
# 设置直方图的位置,r1要比r0大,直方图方向默认为向外
r1 = 0.72r
r0 = 0.68r
max = 8
min = 0
orientation = in
# 填充颜色
fill = yes
fill_color = yes
# 设置直方图轮廓,默认为1px
thickness = 1p
# 直方图是由bins构成的,若bins在坐标轴上不相连,最好设置不要将bins连到一起
extend_bin = no
# 添加背景
<backgrounds>
<background>
background_stroke_color = dark
color = vvlblue
</background>
</backgrounds>
# 添加坐标轴
<axes>
show = data
thickness = 1
color = lblue
<axis>
spacing = 0.2r
</axis>
</axes>
</plot>
可以看到snp和indel的plot的区别是oriention
是out
还是in
。当然还有另一种可以将snp、indel设置在一个plot的方法是将indel的数量那一列设置为负值(相当于oriention=in
),此时的min也要相应的改成indel的最大值的负值。
最后我们还要对图中信息,做一些修改,因为有的基因组中存在大片段的indel,这时还对该区间计算变异数量无疑是不宜的,这里我们表示的方法是删除大片段indel的window统计信息,然后替换成大片段indel的位置信息,其中他的统计值设置成最大值(这样在图中就可明显观察到缺失片段信息),颜色也最好设置成不同的,这里设置为黑色:
Chloroplast 7979 8874 60 fill_color=black
Chloroplast 58023 58917 60 fill_color=black
6、links.conf 配置
基因组内部不同的序列区域之间有联系,将之使用线条进行连接,从而展示到圈图上,常见的是重复序列之间的连接,将以下配置信息放入到一个独立的配置文件中,命名为links.conf。叶绿体基因组的基因可分为三种类型:rRNA, tRNA, gene。分别使用三种颜色将不同种类的基因连接起来。
输入文件格式:
Chloroplast 4110 4184 Chloroplast 16343 16414
Chloroplast 4110 4184 Chloroplast 18447 19470
Chloroplast 4110 4184 Chloroplast 19536 20420
...
# 第一列为连线的起始位置染色体;
# 第二列为连线的起始位置染色体上的起始位置;
# 第三列为连线的起始位置染色体上的终止位置;
# 第四列为连线的终止位置染色体;
# 第五列为连线的终止位置染色体上的起始位置;
# 第六列为连线的终止位置染色体上的终止位置;
links.conf 文件:
<links>
#################################################
<link>
# 指定link文件路径,其数据格式为:
# chr1 start1 end1 chr2 start2 end2
file = mydata/tRNA.links.data
# 设置links曲线的半径
radius = 0.31r
# 设置贝塞尔曲线半径,该值越大越扁平,不好看
bezier_radius = 0r
# 设置link曲线的颜色
color = grey
# 设置link曲线的厚度
thickness = 2
</link>
</links>
这里只画了其中一个类型(tRNA)的连线,其余的设置相同,只是颜色和输入文件不同。
最后,本来还想将重复基因连接起来,但是设置了却没有显示?原因是被后面的<link>gene.links</link>
给覆盖,因为他每一个配置文件模块都相当与一个图层,后面的是会将前面的覆盖的。
7、circos.conf 主配置文件设置
circos命令的输入文件只有一个,也就是我们的主配置文件,在我们的主配置文件中既放了我们上面的各个展示数据的配置文件,也又一些必须的但是不常修改的文件。
本文例子的主配置文件circos_vars.conf如下:
karyotype = mydata/cp_genome.txt
# 设置长度单位
chromosomes_units = 1000
# 设置默认展示所有染色体,这里是所有基因
chromosomes_display_default = yes
<<include ideogram.conf>>
<<include ticks.conf>>
# 展示数据
<plots>
<<include plot_histgram_gene.conf>>
<<include plot_text_forward.conf>>
<<include plot_text_reverse.conf>>
<<include plot_hist_vars.conf>>
</plots>
# 插入必须的但不常修改的标准参数
<image>
<<include etc/image.conf>>
# 修改默认的输出文件名称
file* = vars.png
</image>
<<include etc/colors_fonts_patterns.conf>>
<<include etc/housekeeping.conf>>
最后通过circos -conf circos_vars.conf
绘制图片。
热图,散点图的绘制与柱状图绘制类似,掌握了其中一种方式,其余的学起来便会得心应手。
结果图片如下:
参考:
Circos配置文件
circos官方文档
中文颜色名称与RGB颜色对照表 常用颜色的网络编码及中英文名称
颜色
网友评论