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
一个简单的配置块:
<plots>
type = line #缩进不是必须的,只是方便查看而已
thickness = 2
……
<plot>
每个标签对可以使用多次,或者相互嵌套。因此就像编程中的函数或者循环结构一样,有全局变量和局部变量的区分,高级的或者外层的变量对于层内的所有实例都是有效的,而层内的定义则是优先级最高的。例如,下面配置中的fill_color = blue对于对中所有实例都有效,除非实例内部自己用局部变量进行定义,如内部嵌套的第一个对中的fill_color = red:
<plots>
fill_color = blue
……
<plot>
fill_color = red
……
</plot>
<plot>
……
</plot>
</plots>
一些围绕同一个主题的重要配置块,可以另外单独写到一个配置文件中,再由其他的模块导入调用,所以理论上我们可以把所有的配置写在同一个文件中,也可以把每个配置块都分开到不同的文件中写,最后统一调用。
其中最基本的配置文件都放在$PATH/circos-0.69-4/etc下面,主要是:
Housekeeping.conf