初学Circos
写在前面的
最近因为要准备转博的内容,在加班学习新的核心技术。由于没有考虑周全且高估了自己的能力,导致导致进步较慢。也是有一段时间没有更新了。不过,熬过了接下来相对较长一段时间,我将有很多核心干货分享给大家。上一次推文我讲到,如果受计算资源或者重复序列及其他复杂序列的影响,而不能用全部数据组装基因组的情况下,可以采用随机抽取reads的方法进行组装。上次推文中写到了一个随机抽取FASTQ reads的perl脚本。那个脚本可以自定义抽取reads的比例,可以作为一个较好的工具使用。
Circos学习
最近也是因为研究方向要可视化一些图,如果用其他类型图不能较好且直观地将内容描述清晰。最后我发现如果用circos的方式可视化我的内容,则会更清晰一些。不过在写下面的内容之前我得承认我作图能力是比较差的,可能是我这个人天生缺乏美感,做的图都看起来没有那么好看,下面也只能是以一个初学者的方式介绍这个软件如何使用。
circos是加拿大生物信息学家Martin开发的可视化软件,这个软件是基于perl语言开发的。我看见这个软件的介绍时被其作出的美妙的图迷住,后来看了看这位开发者的信息,发现他还是一个业余高级摄影师。
![](http://image109.360doc.com/DownloadImg/2019/10/1316/173108357_1_20191013044352344)
果然可视化水平与美感有一定联系啊!circos的工作模式是以一套配置文件来实现的。所有的配置文件都是以.conf结尾的。
![](http://image109.360doc.com/DownloadImg/2019/10/1316/173108357_2_20191013044352547)
所以从某种意义上说,只要学会写配置文件相当于就学会了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文件提取基因信息。
![](http://image109.360doc.com/DownloadImg/2019/10/1316/173108357_3_20191013044352688)
#!/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>>
![](http://image109.360doc.com/DownloadImg/2019/10/1316/173108357_4_20191013044352875)
总结:根据我的初步学习,circos主要涉及配置文件编写。配置文件编写的核心是 配置模块的编写。以<>的形式不断往里添加内容,再通过设置每个模块里面读取的文件,可视化方式,字体,label属性等。但是入门容易,做精细难,不仅要考虑颜色搭配、图形与图形的间隔、字体大小、展示方式。对于我而言,当前的学习还远远不够。
写在后面的,近期因为要准备转博内容,在大量学习各个方向知识,我准备暂时把生物信息学小技巧系列更新到(十),然后打算做一些宏基因组分析的推文。
作者信息
熊东彦,中国科学院病毒研究所在读研究生。擅长方向:转录组分析、宏基因组分析、R语言编程、Perl语言编程。近期更新内容:生物信息分析小技巧。