分享

生物信息学分析小技巧(九):Circos入门

 生物_医药_科研 2019-10-13

初学Circos

写在前面的

最近因为要准备转博的内容,在加班学习新的核心技术。由于没有考虑周全且高估了自己的能力,导致导致进步较慢。也是有一段时间没有更新了。不过,熬过了接下来相对较长一段时间,我将有很多核心干货分享给大家。上一次推文我讲到,如果受计算资源或者重复序列及其他复杂序列的影响,而不能用全部数据组装基因组的情况下,可以采用随机抽取reads的方法进行组装。上次推文中写到了一个随机抽取FASTQ reads的perl脚本。那个脚本可以自定义抽取reads的比例,可以作为一个较好的工具使用。

Circos学习

        最近也是因为研究方向要可视化一些图,如果用其他类型图不能较好且直观地将内容描述清晰。最后我发现如果用circos的方式可视化我的内容,则会更清晰一些。不过在写下面的内容之前我得承认我作图能力是比较差的,可能是我这个人天生缺乏美感,做的图都看起来没有那么好看,下面也只能是以一个初学者的方式介绍这个软件如何使用。
        circos是加拿大生物信息学家Martin开发的可视化软件,这个软件是基于perl语言开发的。我看见这个软件的介绍时被其作出的美妙的图迷住,后来看了看这位开发者的信息,发现他还是一个业余高级摄影师。

        果然可视化水平与美感有一定联系啊!circos的工作模式是以一套配置文件来实现的。所有的配置文件都是以.conf结尾的。

        所以从某种意义上说,只要学会写配置文件相当于就学会了circos。接下来,我们开始进入circos学习。首先第一步是安装circos。这里为了方便,我使用了conda安装。由于我的conda不是按照其默认路径安装,而是自己安装在了一个路径,所以调用conda创建一个虚拟环境可以用如下命令。

conda create -prefix=/softwares/miniconda3/envs/circos
#激活circos环境
conda activate circos

        circos的使用方法很简单,通过阅读官方文档,circos只需要写好配置文件,将配置文件和数据文件放在同一路径下,运行如下命令即可

circos -conf circos.conf

        接下来我们创建一个circos.conf的配置文件。这里面如何填内容呢?一般circos外圈都会画物种的基因组(染色体),那么我们第一句命令是要让circos读取我们的染色体/基因组信息文件。我的物种是噬菌体,只有一条“染色体”,我写入circos的第一句话是

karyotype = Phage.genome.txt
Phage.genome.txt文件中写入如下内容
#定义染色体 #染色体编号 #染色体编号 #起始位置 #结束位置 #颜色
chr - chrNC_021316.1 chrNC_021316.1 0 42185 black

        光有染色体文件不够,我们能否以此为基础将基因组上的基因名称注释在圈图上呢?可视化注释基因需要一个至少4列的基因信息文件,这个文件有两个可视化用途:
1.在最外层基因组圈图上正确位置连上基因名称;
2.在内层可以再可视化一个用颜色注释的基因圈图。(我这句话可能描述不清楚,看结果可以理解)
        这4列分别是染色体名称,基因起始位置,结束位置,基因名称,填充颜色(可以不要),要获得这个文件首先要写一个脚本从GTF文件中获取这些信息,这里为了方便,我将生成两份文件,一份用于可视化用途1,一份用于可视化用途2.因为我还想画一个内圈,用不同的颜色展示基因。由于我的噬菌体只有54个基因,从gp1…gp54,我想用三种颜色代表这些基因在基因组上的区域,例如蓝色代表在基因组5’端基因,黄色代表在基因组中间的基因,红色代表在基因组3’端基因。先列一个提示文件如下,然后再写一个perl脚本用于通过提示文件和GTF文件提取基因信息。

#!/usr/bin/perl
=head1 Name

        clustergene2circos.pl

=head1 Description


        Not: Use GTF file, GTF column should be check gene id.

=head2 Usage

        perl clustergene2circos.pl descriptgenefile GTFfile

=head2 Author

        Dongyan Xiong

=head3 Edit time

        2019-09-018 23:09       1.0     

=cut


open(cluster,'<',$ARGV[0]);

my @toCircos;

while (<cluster>) {

        my @genemark = split/\t/,$_;

        open(GTF,'<',$ARGV[1]);

        while (<GTF>) {

                my @gtfmark = split/\t/,$_;

                my @note = split/ /,$gtfmark[8];

                my $gene_name = $note[3];

                $gene_name =~ tr/';//d;

                $gene_name =~ s/gene-M172_//;


                if($genemark[0] eq $gene_name){

                        if($genemark[1] =~ m/5end/){

                                push @toCircos,'chrNC_021316.1'.'\t'.$gtfmark[3].'\t'.$gtfmark[4].'\t'.$genemark[0].'\t'.'fill_color=blue'.'\n';

                        }
                        elsif($genemark[1] =~ m/Middle/){

                                push @toCircos,'chrNC_021316.1'.'\t'.$gtfmark[3].'\t'.$gtfmark[4].'\t'.$genemark[0].'\t'.'fill_color=yellow'.'\n';

                        }
                        elsif($genemark[1] =~ m/3end/){

                                push @toCircos,'chrNC_021316.1'.'\t'.$gtfmark[3].'\t'.$gtfmark[4].'\t'.$genemark[0].'\t'.'fill_color=red'.'\n';

                        }

                }
                else{

                        next;

                }

        }

}

print @toCircos;

         最后生成基因信息文件,命名为gene.text.txt,再复制这份文件重命名为gene2circos.txt,第一个文件用于在基因组圈图上标出基因名称,第二个文件用于画内圈,标记不同位置基因颜色。有了这些文件,我们就可以写circos.conf文件了。

Karyotype=Phage.genome.txt
#为基因组圈图添加颜色
chromosomes_color = chrNC_021316.1=gnbu-9-seq
#定义单位距离,由于我的噬菌体基因组没有太长,我选择10k为单位长度
chromosomes_units = 10000
show_ticks = yes
show_tick_labels = yes

#<></>配置模块就以此格式形式编写,不同配置模块的编写先后顺序可以不同。先是刻度标签ticks的配置
<ticks>
#设置基因组圈图半径
        radius = 1r
        color = black
        thickness = 2p
#将输出的标签长度按比例缩小,比例系数为1e-4
        multiplier = 1e-4
#显示整数
        format = %d

<tick>
#设置间距
        spacing = 1u
        size = 5p
</tick>

<tick>
        spacing = 5u
        size = 10p
        show_label = yes
        label_size = 10p
        label_offset = 10p
        format = %d
</tick>

</ticks>
#ideogram是染色体配置模块
<ideogram>
<spacing>
default = 0.005r
</spacing>
#基因组外圈的内半径
radius = 0.90r
thickness = 20p
fill = yes
#下面主要是选择是对label的一些调整,不过我还没有细致研究这里面每一个参数,如果要制作CNS图片的话这些参数不断调试对图片质量影响还是很大的
stroke_color = dgrey
stroke_thickness = 2p
show_label = yes
label_font = default
label_radius =dims(ideogram,radius) + 0.05r
label_size = 16
laberl_parallel = yes
label_format = eval(sprintf('%s',var(chr)))
</ideogram>

#plots模块算是对于初学者比较重要的模块了,因为它直接决定了圈图内能画出啥。
<plots>
type = text
label_font = default
label_size = 6p
#首先是第一个plot模块,用于在基因组圈图正确位置标出基因名称,用到了我们生成的gene.text.txt
<plot>
file = gene.text.txt
#r1,r0有两个作用,一方面可以设置展示方向,r1>r0是向外展示,反之向内展示。另外+30p代表字体大小
r1 = 1r+30p
r0 = 1r
#如下是是否显示links,links是将基因名称连到基因组位置上的线,不过这里我还没有调整到一个满意的参数,以至于连线看起来不是很自然
show_links = yes
link_dims = 0p,0p,20p,0p,5p
link_thickness = 2p
link_color = red
</plot>
#第二个plot模块是对固定长度基因数目多少的热图展示,这部分数据制作可以参考洲更大神的简书
<plot>
type = heatmap
file = genes_num.txt
color = greens-9-seq
r1 = 0.40r
r0 = 0.21r
</plot>
#这部分内容是我将基因在基因组位置上进行颜色标记,填充的颜色在gene2circos.txt这个文件的第4列。
<plot>
type = histogram
glyph = circle
glyph_size = 1
file = gene2circos.txt
r1 = 0.60r
r0 = 0.45r
min = 0
max = 1
fill_under = yes
orientation = in
</plot>

</plots>


<image>
dir* = .
radius* = 500p
<<include etc/image.conf>>
</image>

<<include etc/colors_fonts_patterns.conf>>
<<include etc/housekeeping.conf>>

        总结:根据我的初步学习,circos主要涉及配置文件编写。配置文件编写的核心是 配置模块的编写。以<>的形式不断往里添加内容,再通过设置每个模块里面读取的文件,可视化方式,字体,label属性等。但是入门容易,做精细难,不仅要考虑颜色搭配、图形与图形的间隔、字体大小、展示方式。对于我而言,当前的学习还远远不够。

写在后面的,近期因为要准备转博内容,在大量学习各个方向知识,我准备暂时把生物信息学小技巧系列更新到(十),然后打算做一些宏基因组分析的推文。

作者信息

熊东彦,中国科学院病毒研究所在读研究生。擅长方向:转录组分析、宏基因组分析、R语言编程、Perl语言编程。近期更新内容:生物信息分析小技巧。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多