Circos进阶

吴琨、崔潇 中国海洋大学生物多样性与进化所 2018-05-12 20:42

    之前已经跟大家介绍过,circos其实是一款依赖于Perl之下的软件包(相关往期:一招解决circos的安装),一般用来制作基因组图形,生成结果一般为png和svg格式。

    由于很多人并不熟悉linux操作,因此,本文主要讲解在Windows下,如何使用circos进行绘图和操作。


Image


   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


Image

作者:进化基因组学实验室

2017级水生生物学硕士研究生 吴琨

2016级生物科学本科生 崔潇



Image

长按下方二维码关注我们

Image
Image

编辑:进化所宣传组

Scan to Follow