好几天没写博客了,最近刚好整完一个基因组的circos图绘制,就顺手写一个circos的教程。
望各位看官不要在意,毕竟新手上路
一般基因组文章都会有一个炫酷的circos图,用来描述基因组的基因密度分布,转座子的密度分布和各种其他信息比如种内的共线性关系
下载软件并且创建环境
在linux下面创建环境,首选当然是无敌得conda啦。
1 | $ conda create -c bioconda -n circos circos |
好,这样子我就创建好了一个用于绘制circos图的环境了,现在我们来启动环境并测试他
1 | $ conda activate circos |
有输出结果就代表你已经安装好了,那么我们准备开始新手上路。
新手司机上路就问你怕不怕
1.创建一个核型文件
在创建各种配置文件之前,我们需要创建几个文件夹来存放我们的数据
1 | $ mkdir circos && cd circos |
00.karyotype : 用于存放你的核型文件
01.data : 用于存放你的各种要展示的其他信息的文件
02.links : 用于存放你的共线性信息文件
03.conf : 用于存放你的各种配件conf文件
创建好这些文件之后,我们进入到00.karyotype文件中,
然后使用脚本也好,软件也罢,去获取你所要绘制的基因组的序列长度,
然后构建一个如下的文件:
1 | $ touch karyotype.txt |
之后我们回到circos目录下面,建立一个circos.conf文件.内容如下
1 | $ touch circos.conf && emacs circos.conf |
在上面这个文件中你看到了03.conf/02.ticks.conf这个文件,这里我就不多做说明了,官方写的比我详细。
好了,到这里我们就画了染色体绕圈圈的图了
接下来我们就要给这个圈圈里面添加各种信息了
2.现在我已经十分的懂,没人比我更懂circos的数据准备了
好。我们来处理数据,首先我们需要一个滑窗文件,让我们使用bedtools去创建一个500k滑窗(大小可以自己设定)
1 | $ cd 01.data |
接下来我们需要一个基因组的注释文件gff3,并将其转化为bed格式然后统计每个滑窗里面的基因数目
1 | $ bedtools coverage -a karyotype.500k.windows -b genes.bed | cut -f 1-4 > 01.genes_num.txt |
然后我们再来统计一下基因的gc含量信息
1 | $ bedtools nuc -fi genome.fasta -bed karyotype.500k.windows | cut -f 1-3,5 > 02.500k_gc.bed |
好叻,是时候处理一个共线性文件了,我们使用MCscan-python去获取共线性对
你需要一个物种的全cds文件和gff文件
1 | $ conda create -n jcvi python=3.8.3 -y |
之后我们会获得一个peach.peach.lifted.anchors的文件,格式如下
1 | $ gene1 gene2 score |
然后需要一个脚本将其根据在染色体上的位置转化为下面的格式:
1 | $ chr1 start end chr2 start end |
好了,数据的准备我们算是完成了,接下来让我们来构建conf文件吧。lets go dude !
Lets Go Dude!! !
二话不说直接进入03.conf文件里面创建conf文件
我们来创建一个基因数量的conf文件,格式如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15$ <plot>
$ type = histogram
$ file = ../01.data/01.genes_num.txt
$ r1 = 0.99r
$ r0 = 0.89r
$ fill_color = 108,166,205
$ extend_bin = no
$
$ <backgrounds>
$ show = data
$ <background>
$ color = 240,240,240
$ </background>
$ </backgrounds>
$ </plot>再来创建一个gc含量的conf:
1
2
3
4
5
6
7
8
9
10
11
12
13$ <plot>
$ type = line
$ file = inputfile
$ r1 = 0.86r
$ r0 = 0.79r
$
$ <backgrounds>
$ show = data
$ <background>
$ color = 217,217,217
$ </background>
$ </backgrounds>
$ </plot>links的conf文件略显不同,格式如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19$ <link>
$ type = line
$ file = yourlinksfile
$ radius = 0.45r #link曲线半径
$ bezier_radius = 0r #贝塞尔曲线半径
$ tickness = 8 #link曲线厚度
$ color = black_a4
$ <rules>
$ <rule>
$ condition = var(intrachr)
$ show = no ##下面如果link文件中该行数据是染色体内部的link,则不进行展示
$ </rule>
$ <rule>
$ condition = 1
$ color = eval(var(chr2)) #设置link曲线的颜色为第二条染色体的颜色,对应着link文件中第四列数据对应的染色体的名称
$ flow = continue
$ </rule>
$ </rules>
$ </link>最后将这些配置文件写入circos.conf中就好了
1
2
3
4
5
6
7
8
9
10$ <<include 03.conf/02.ticks.conf>>
$
$ <plots>
$ <<include 03.conf/03.histogram.conf>>
$ <<include 03.conf/04.line.conf>>
$ </plots>
$
$ <links>
$ <<include 03.conf/07.lines.conf>>
$ </links>
Show our results
准备了那么多就为了一个图,运行下面的命令吧,然后获得你的文件吧
1 | $ circos -conf circos.conf |
完成后会在你的文件下面形成两个图形文件一个png格式一个svg格式
如果你想要pdf格式的文件,你可以使用cairosvg对文件进行转换如何安装和使用cairosvg,百度是个好东西,所以我就不写了困了,想去睡觉了,希望这篇教程对大家有所帮助
感谢:
https://github.com/tanghaibao/jcvi/wiki/MCscan-(Python-version)
https://www.jianshu.com/p/ea3a8933ace9
http://circos.ca/software/download/