之前已经跟大家介绍过,circos其实是一款依赖于Perl之下的软件包(相关往期:一招解决circos的安装),一般用来制作基因组图形,生成结果一般为png和svg格式。
由于很多人并不熟悉linux操作,因此,本文主要讲解在Windows下,如何使用circos进行绘图和操作。
Circos的使用主要通过一个配置文件。该配置文件的内容格式主要以各种区块表示,大区块中可以包含小区块。区块中以“变量=值”的方式来 进行参数的设定。在配置文件中一部分不需要改动,比如颜色、字体等。我们一般将这类信息保存到一个独立的配置文件中,这种情况我们需要在主配置文件中声明 包含这些独立的配置文件名。例如:
设置生成图片参数:
<image>
<<include etc/image.conf>>
</image>
设置颜色、字体、填充模式的配置信息:
<<include etc/colors_fonts_patterns.conff>>
系统与Debug参数:
<<include etc/housekeepig.conf>>
Circos的参数:
-version
查询circos版本
-modules
检测perl模块
-conf <string>
输入主配置文件
-outputdir <string>
设置输出文件的路径
-outputfile <string>
设置输出文件名,该参数的值以.png为后缀
-svg
生成svg结果文件
-nosvg
不生成svg结果文件
在使用时,一般可以提前配置好文件,之后只需要修改一部分参数,就可以绘制出好看的图片。主要包括染色体、染色体的刻度、连线、直方图、热图、文本这六大 块,可以把配制文件分开放,也可以把它们合在一起,放在一个文件中,接下来就让我们看看这些配置文件分别是如何配置的。
用Circos配置文件非常复杂,下面将详细分析示例中的各个track(染色体、染色体的刻度、连线、直方图、热图、文本):
1
ideogram block显示染色体
在图中展示染色体,代表每个染色体的图形成为ideogram。
将配置信息放入到一个单独的配置文件ideogram.conf中。
<ideogram>
##设定ideograms之间的空隙
<spacing>
#设置圈图中染色体之间的空隙大小,以下设置为每个空隙大小为周长的1.0%
default=0.01r
#也可以设置指定两条染色体之间的空隙
#<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
ticks block添加染色体刻度的显示
添加刻度显示,将信息配置到文件ticks.conf中。
#是否显示ticks
show_ticks=yes
#是否显示ticks的labels
show_tick_labels=yes
##设定ticks
<ticks>
##ticks的位置
#设定ticks的位置
radius=1r
#设定ticks的颜色
color=black
#设定ticks的厚度
tickness=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>
3
lines block以曲线连接显示基因组内部区域之间的联系
基因组内部不同的序列之间存在联系,用线条进行拼接,进而展示到圈图上。重复序
列之间的连接比较常见,将以下配置信息配置到单独的文件中,给其明明links.conf
<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曲线的颜色与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>
4
plots block以直方图形式展示数据
在圈图中用直方图的形式展示基因组序列的GC含量,表达量等。将以下配置信息配置到一个单独的文件plots_histogram.conf中。
<plot>
#设定为直方图
type=histogram
#数据文件路径,为4列:
#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中修改。
hickness=0p
#设定直方图的背景颜色
<backgrounds>
show=data
<background> color=vvlgrey </background> <background> color=vlgrey y0=0.2r y1=0.5r
</background>
<background>
color=lgrey
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
file=data/5/segdup.hs1234.stacked.txt
r1=0.99r
r0=0.92r
fill_color=hs1,hs2,hs3,hs4
thickness=0p
orientation=in
extend_bin=no
<rules>
<<include exclude.hs1.rule>>
</rules>
5
plots block以热图形式显示数据
当基因组一个区域有多组数据时,适合以热图形式显示数据。比如基因表达量,将以下配置信息配置到一个单独的文件plots_heatmap.conf中。
<plot>
#绘制heat map
type=heatmap
#设定数据文件路径。文件有5列
#chrID stsrt 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,hs1_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>
6
plots block以文本形式显示数据
若需要在圈图上显示一些基因的名称,此时需要以文本形式显示数据,将以下信息配置到一个单独的文件plots_text.conf中。
<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前加一条线,用来指出label的位置。
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>
7
rules block放置常用的规则配置
本例子中,很多track没有在1号染色体上显示,需要设置如下的规则信息,将其写入到exclude.hs1.rule中。
<rule>
condition=on(hs1)
show=no
</rule>
8
主配置文件
在主配置文件circos.conf中,包含以上所需要的配置文件信息,则可以画出所需要的track。此外还可以设置一些全局的设置。
#指定染色体组型的文件,该文件有7列,例如:
#chr-ID LABEL START END COLOR
#chr-hs1 1 0 249250621 chr1
#chr-hs2 2 0 243199373 chr2
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_scale=/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/colors_fonts_patterns.conf>>
<<include etc/housekeeping.conf>>
以上就是常见的一些指令,希望对大家有帮助!
参考文献
1.Circos的安装和简单使用:http://www.chenlianfu.com/?p=2342
2. Circos从入门到精通:https://blog.csdn.net/u014182497/article/details/52513269
3. windows环境下Perl circos的安装与使用:https://blog.csdn.net/zhu_si_tao/article/details/53504334
作者:进化基因组学实验室
2017级水生生物学硕士研究生 吴琨
2016级生物科学本科生 崔潇
长按下方二维码关注我们
编辑:进化所宣传组
Scan to Follow