1 Circos简介
Circos是一个非常酷炫的基因组数据可视化软件,能够将基因组数据映射到环形的基因组坐标上,用相互嵌套的环道来展示基因组数据,还可以通过连接线来呈现基因组区块之间的关系。Circos的开发者是一位加拿大的生物信息学家Martin Krzywinski,值得一提的是,他还是一位专业的摄影师。于是,科学和艺术的交融,催生了Circos这款强大的可视化软件,果真不懂艺术的码农不是好的生物学家。
自从Circos诞生以后,圈图就成了生物信息可视化的明星图形,不时见诸顶尖杂志的文章。尽管有意见认为,圈图表达的信息量太过全面,看似高端但是并没有太多用处,只是用来装门面而已。但是,不得不承认的是,圈图使得丰富多变的基因组数据的呈现,有了一个全景、优雅的解决方案。环形呈现数据的优势在于,它能够在有限的呈现面积上,展示尽可能多的序列属性和关联信息,以有限容纳无限,颇有芥子纳须弥的禅意。因而,Circos的实际应用,已经延伸到生物信息学领域之外,在金融、经济、政治、甚至考古等领域都有很多基于圈图的可视化结果。
2 Circos的安装
2.1 准备工作
由于Circos是基于perl语言开发的,所以perl语言编译器的安装是必须的(建议Perl 5.8.x及以上版本),除此之外还需要很多perl依赖模块,可以通过测试查看缺少哪些模块并安装。详细的准备要求可以见http://circos.ca/software/requirements/。
2.2 下载及解压
在Circos官网的下载页面(http://circos.ca/software/download/),可以找到Circos最新版的下载链接,其中circos-0.69-6.tgz是目前最新版的安装包,而circos-course-2017.tgz则是配套的教程数据。
wget http://circos.ca/distribution/circos-0.69-6.tgz
tar xvfz circos-0.69-6.tgz
cd circos-0.69-6
2.3 测试依赖模块
首先可以列出来Circos需要哪些依赖模块:
cd $PATH/circos-0.69-6/bin #$PATH是解压后circos文件夹的上级全路径
./list.modules
当然,这些依赖模块有些可能已经安装过了,重复安装比较浪费时间,所以可以直接运行一下Circos,看它的报错信息说缺少哪些模块,再一个个安装:
./circos -v
2.4 安装依赖模块
Perl模块的安装方法不再细讲。
2.5 安装GD模块
一般来讲,缺少的模块,大部分安装起来都比较顺利,可能有一个除外,就是GD。GD模块是一个图像相关的源码库,它需要很多前置的依赖包和依赖软件,我这里参考了一篇博文的方法进行安装,详见(http://starsyi.github.io/2016/05/31/%E9%9D%9Eroot%E7%94%A8%E6%88%B7perl-GD%E6%A8%A1%E5%9D%97%E7%9A%84%E5%AE%89%E8%A3%85/)。
2.6 测试
上面这些都安装完毕后,就可以尝试运行一下Circos:
./circos -v
如果不出现报错信息,一般就没有问题了。
3 认识Circos
3.1 Circos的运行
Circos的运行命令非常简单,在准备好输入数据和配置文件后,只需要一行简单的代码,就可以产生结果图,在软件目录$PATH/circos-0.69-4/example下有测试样例,任务执行脚本run中的核心命令是:
$PATH/bin/circos -conf circos.conf
运行一下之后,大约半分钟就会产生结果:
cd $PATH/circos-0.69-4/example
./run
产生的结果图有两个,其中circos.png是用来预览的位图文件,circos.svg是用来出版或者进一步加工的矢量图文件。
是不是看起来很简单?
这么酷炫的效果,当然不是这么容易就能实现的。所以,真正的工作量,都在输入数据的准备和配置文件的设计上。
3.2 Circos的配置结构
圈图中各个环道,是依赖一系列依赖调用的配置文件描述出来的,从底层的颜色等,到更高层的抽象,以及最终的元配置,构成了一个堆叠起来的配置文件金字塔。
Circos的配置文件后缀为.conf,内容是标记性文本格式的,类似于HTML或者XML,每个标签对代表一个配置块,起始标记为
variable = value
一个简单的配置块:
type = line #缩进不是必须的,只是方便查看而已
thickness = 2
……
每个标签对可以使用多次,或者相互嵌套。因此就像编程中的函数或者循环结构一样,有全局变量和局部变量的区分,高级的或者外层的变量对于层内的所有实例都是有效的,而层内的定义则是优先级最高的。例如,下面配置中的fill_color = blue对于对
fill_color = blue
……
fill_color = red
……
……
一些围绕同一个主题的重要配置块,可以另外单独写到一个配置文件中,再由其他的模块导入调用,所以理论上我们可以把所有的配置写在同一个文件中,也可以把每个配置块都分开到不同的文件中写,最后统一调用。
其中最基本的配置文件都放在$PATH/circos-0.69-4/etc下面,主要是:
Housekeeping.conf #基本框架配置,circos必不可少的配置文件,一般直接导入即可。
fonts.conf #字体配置文件,其中,代表字体的标签与circos/fonts文件夹下的otf或ttf文件一一对应。
patterns.conf #模式配置文件,其中,标签与circos/tites文件夹下的png文件一一对应,然后根据patterns.svg.conf生成相应的svg文件。
colors.conf #颜色配置文件,导入了colors.brewer.conf、colors.hsv.conf和colors.ucsc.conf。在circos中,颜色除了绝对路径,还有很多表达方式,如hs1,red,reds-9-seq-1等,是因为这些字符在colors配置文件中已经赋予了特定的绝对路径。
以上的基本配置大多数情况下无需调整,直接调用导入即可。导入配置的基本格式是:
<
> #etc/*.conf就是要导入的配置文件的相对或者绝对路径
还有一些经常用到的其他配置,可以根据自己喜好定制:
ideogram.conf #染色体展示的配置文件,包括是否展示bands,染色体展示位置、染色体间距离、染色体标签位置等。
ticks.conf #刻度标签配置文件,可以导入到ideogram.conf中,也可以直接导入到主配置文件中。
image.conf #对image大小、背景颜色、输出目录、输出文件形式以及染色体在圆周上的起始位置等进行设置。
最后,这些配置文件都会导入到circos.conf,基本内容是:
karyotype = data/karyotype/karyotype.mouse.mm9.txt #核型文件
chromosomes_units = 1000000 #就是其他的配置文件中距离单位u的大小,以bp来衡量,一般大的基因组倾向于把一个单位的长度设置得大一些
chromosomes_display_default = yes
<
> <
> ……
<
> <
> <
>
配置完所有的配置文件后,最后将这个元配置文件输入Circos就可以产生结果:
$PATH/bin/circos -conf circos.conf
4 核型图绘制
核型图是圈图的基础框架,它依赖核型数据,奠定了整个圈图的环形坐标框架,作为其他数据绘制的基准而存在着。一般的核型图就是竖排的染色体,而圈图中的核型图其实就是把染色体首尾相接成一个圆环,核型数据描述了染色体的长度,还可以加上染色体中条带的坐标。
4.1 核型数据的准备
核型数据是Circos中最基本的,也是必需的数据,核型数据的格式一般为
#染色体 - 染色体编号(ID) 图显示名称(Label) 起始 结束 颜色
chr - Gmax01 1 0 56831624 chr1
chr - Gmax02 2 0 48577505 chr2
chr - Gmax03 3 0 45779781 chr3
……
#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
...
染色体和条带描述放在同一个数据文件中,各列的含义是:
染色体band chr,这一列定义表明这是一个染色体;band表明这是一个条带。
-/DOMAIN 短线占位符,这个占位符通常用来定义所属关系,对于染色体来说,没有所属;DOMAIN表明所属的区段或者染色体
染色体编号 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软件目录中,已经内置了人类和小鼠的核型文件,以供调用。
由于圈图的应用范围拓展到了生物学以外的领域,所以这个核型数据也可以抽象为一种单纯的坐标体系来自由定义。
4.2 核型配置文件
核型配置文件就是ideogram.conf,其中基本的配置变量如下:
show = yes
default = 0.005r #染色体间的空隙
thickness = 25p #ideograms的厚度,可以使用r(比例关系)或p(像素)作为单位
fill = yes #设定ideograms是否填充颜色。填充的颜色取决于 karyotype 指定的文件的最后一列。
radius = 0.8r #设定ideograms的位置
show_label = yes #设定是否显示label
label_font = default#设定label的字体
label_radius = dims(ideogram,radius_outer) + 80p #设定label的位置
label_size = 40p #设定label的字体大小
label_parallel = yes #设定label的字体方向,yes是易于浏览的方向。
其中,Circos的配置中有四种单位,p, r, u, b
p表示像素,1p表示1像素
r表示相对大小,0.95r表示95% ring 大小。
u表示相对chromosomes_unit的长度,如果chromosomes_unit = 1000,则1u就是千分之一的染色体长度。
b表示碱基,如果染色体长1M,那么1b就是百万分之一的长度。
除此之外,还要配置一下刻度文件ticks.conf,基本内容是:
show_ticks = yes #是否显示 ticks
show_tick_labels = yes #是否显示 ticks 的 lables
tick_label_font = light
radius = dims(ideogram,radius_outer) + 10p #设定 ticks 的位置
label_offset = 5p #设置 ticks' label 离 ticks 的距离
label_size = 20p #设置 ticks' label 的字体大小
multiplier = 0.001 #设定 ticks' label 的值的计算。将该刻度对应位置的值 * multiplier 得到能展示到圈图上的 label 值。
color = black #设定 ticks 的颜色
thickness = 1p # 设定 ticks 的厚度
spacing = 50u #设置每个刻度代表的长度。
size = 12p #设置 tick 的长度
show_label = yes #是否显示tick labels
label_separation = 1p
spacing = 5u
size = 7p
show_label = no
ideogram.conf和ticks.conf这两个配置文件都已经导入circos.conf文件中
<
> <
> <
> karyotype=/ldfssz1/HT/wangdaoming/test/circos/test_2/data/hp.karyotype.txt
chromosomes_reverse = /hp_26695/
<
> chromosomes_units = 1000
chromosomes_display_default = yes
<
>
然后在circos.conf中导入该配置,直接运行Circos:
$PATH/bin/circos -conf circos.conf
结果出来了:
5 绘制基本数据图
5.1 数据文件格式
完成核型图框架之后,就可以向图中添加各种环道展示数据了,环道中的图像类型有Scatter Plots、Line Plots、Histograms、Heatmaps 、Connectors 、Highlights、Links等等。
这些图形涉及的数据类型主要分为以下几类。
Scatter Plots、Line Plots、Histograms、Heatmaps数据数据格式:
#染色体编号 起始位置 终止位置 value 设置
hp_26695 1 200 0.925925925925926
hp_26695 201 400 0.132530120481928 fill_color=red,z=68
hp_26695 401 600 -0.178082191780822
hp_26695 601 800 -0.148514851485149
hp_26695 801 1000 -0.376344086021505
hp_26695 1001 1200 -0.04
hp_26695 1201 1400 -0.22
内容很容易理解,其中设置这一列可有可无,多个设置就用逗号隔开。
Connectors的数据格式:
chr firstLocal secondLocal
Highlights的数据格式:
chr start end fill_color=color,…,…
5.2 数据图配置
以折线图(line)为例,line.conf的基本内容如下:
type = line #设定显示类型
thickness = 2p #折线图的粗细
max_gap = 1u
file = data/hp.GCskew.txt #输入数据
color = vdgrey #折线颜色
min = -0.5 #环道内圈代表的数值下限,超出下限的数值不会显示,下同
max = 0.5 #环道外圈代表的数值上限
r0 = 0.85r #环道内圈位置
r1 = 0.95r #环道外圈位置
fill_color = vdgrey_a3
#设置折线图大于0部分显示为蓝色 condition = var(value) > 0
color = blue
fill_color = blue_a1
#设置折线图小于0部分显示为红色 condition = var(value) < 0
color = red
fill_color = red_a1
在circos.conf中导入该配置,然后运行后结果如下:
发现一个隐藏的注意事项,2D环道绘图的输入数据文件的最大容许行数为25000,如果超过的话会报错:
Circos::Error::fatal_error(“track”, “max_number”, 32366, “line”, “input.data.txt”, 25000) called at $CIRCOS_PATH/circos-0.69-4/bin/../lib/Circos.pm line 1557
所以,如果输入文件行数超过了限额,就需要拆分为多个文件,每个文件的行数都要小于25000。
其他的细节配置和其他数据图的绘制都大同小异,可以详见circos的官网的文档介绍。
6 连线图绘制(Links)
连线图是圈图中特殊的一类图形,不同于纯粹依赖染色体坐标定位,和数值属性定义的环道图形,连线图还反映了圈图中染色体区段之间的关系信息,例如物种基因组间共线性区段等。
6.1 连线图的数据格式
chr-a start-a end-a chr-b start-b end-b options
hp_26695 205 236 hp_52 39 70
hp_26695 238 297 hp_52 72 131
hp_26695 299 318 hp_52 133 152 color=red
hp_26695 338 411 hp_52 172 245
hp_26695 413 438 hp_52 247 272
hp_26695 449 495 hp_52 283 329
6.2 连线图的配置文件
连线图基本配置如下:
file = data/hp.synteny.link.txt #输入数据
ribbon = yes #用带状连接
flat = yes #设置条带不扭转(twist)
radius = 0.84r #设置 link 曲线的半径
bezier_radius = 0r #设置贝塞尔曲线半径,该值设大后曲线扁平,使图像不太好看。
color = blackweak #设置 link 曲线的颜色
thickness = 1 #设置 link 曲线的厚度
导入配置,运行后结果如下:
7 结语
每绘制一个圈图时,先要构思好要呈现哪些信息,包括需要多少环道,每个环道要使用什么可视化效果,连接关系也要考虑好呈现逻辑,是否需要添加特殊规则等。打好框架草稿后,新建一个工程目录,把配置文件放在一个文件夹里,数据放在另一个文件夹里。首先把底层的染色体文件配置好,将基础的核型图框架调试到最佳,再开始一圈圈添加环道,逐个调试,最后再添加连接。配色以及个别细节,可以在成稿的基础上一步步润色修改。
本文大致介绍了Circos的入门方法,旨在帮助初学者了解Circos的使用逻辑,更详细的变量配置和图形绘制,可以在circos官网中找到丰富的图文教程,并下载教程资料进行学习。