距离上次画circos图,已经4个月了,至今仍然记得当时在Linux下装Perl模块时的惨烈。最后果断选择用Windows版的,至于如何在Windows下配置circos运行环境,有时间再写一篇吧。
菜鸟的吐槽:Linux系统下不是root用户就是麻烦,不过后来听说了一种无痛安装Perl模块的方法,就是非root用户自己下载安装一个perl,添加到环境变量中,CPAN什么的都依赖这个自己专属的perl。我还没试过。
circos图其实本质跟其他描述基因组特征的软件包差不多,只需要知道一个区间/位置加上该区间/位置对应的属性就可以了,展现方式有多种多样,比如:线图、柱形图、热图、弦图等等。之前看到一些评论说circos图“装13大于实用”,我不太赞成这种说法,因为很多时候circos图确实可以很好地展现值的大小和交互关系。
最开始接触这种图的时候也觉得挺复杂的,后来理解了其配置文件
之后,发现也没那么难。
1. 需要准备哪些数据
1.1 karyotype.txt
这个文件用来描述染色体,一般放在circos图的外圈
chr - NC_027757.2 A1 0 35822559 chr1
chr - NC_027758.2 A2 0 35332830 chr2
chr - NC_027759.2 A3 0 49139117 chr3
chr - NC_027760.2 A4 0 23556786 chr4
chr - NC_027761.2 A5 0 31473442 chr5
第1、2列一般不变,第3列是其它画图数据文件中的染色体名称,第4列表示换个名字,5、6列染色体起止位置,7列描述颜色(目前我可以确定的是chr1-chr22各表示一种颜色)。
1.2 每一圈需要什么样的数据
以snp密度的圈图为例,我需要知道在特定大小的窗口内,有多少个snp。就像这样,
NC_027757.2 1 10000 51
NC_027757.2 10001 20000 90
NC_027757.2 20001 30000 48
NC_027757.2 30001 40000 2
NC_027757.2 40001 50000 21
再比如,gene密度的圈图,需要知道gene的区间,再将区间highlight出来。因为区间不大,一个gene看上去就像一条细线
NC_027757.2 6637 9236
NC_027757.2 15630 16233
NC_027757.2 22106 23935
NC_027757.2 24221 25607
NC_027757.2 31070 40586
......
2. 基本的配置文件
先来看看软件安装成功后有哪些子文件夹,如下:
我的习惯是把所有配置写到一个文件中去。
#以下几列和<ideogram>部分是画染色体的
karyotype = my_data/my_karyotype/karyotype.txt #karyotype.txt的路径
chromosomes_order_by_karyotype = yes #是否按照karyotype.txt文件中的顺序来画染色体
chromosomes_units = 1000000 #将1000000碱基看作一个染色体单元
chromosomes_display_default = yes #是否展示全部染色体
#如果是no,则需要重新设置染色体,比如: chromosomes = 染色体1名称;染色体2名称
#设置染色体颜色chromosomes_color = 染色体1名称=red;染色体2名称=vvdred;染色体3名称=vvlred
#其实只要将karyotype.txt最后一列定义为chr1-chrN即可;当然上面这种方法是可以的,不过很麻烦,且一时也想不到那么多颜色
######################################################
<ideogram>
show = yes
radius=0.90r
thickness = 25p #染色体的宽度
fill = yes #是否填充
#设定ideograms轮廓,就是在染色体外边框加线
#stroke_thickness = 1
#stroke_color = black
#染色体外圈的标签,比如chr1A、chr2A......
show_label = yes
label_font = default
label_radius=1r+90p
label_size=40
label_parallel = yes
#染色体之间的间隔
<spacing>
default = 0.005r
#<pairwise "/chr1A/ /chr2A/"> #在特定的两条染色体之间加上自定义的距离
#spacing = 3r
#</pairwise>
</spacing>
</ideogram>
######################################################
#以下部分是画染色体刻度的
show_ticks = yes
show_tick_labels = yes
<ticks>
tick_label_font = light
radius=1r
color = black
thickness = 2p
multiplier = 1e-6 #物理位置乘以这个数来表示刻度位置,比如物理位置是10000000位碱基,则在刻度上为10
format=%d #刻度位置显示为十进制整数
#设置标尺上的大刻度
<tick>
spacing = 10u #10个染色体单元,即10000000碱基长度
size = 12p
show_label=yes
#设置ticks'label离ticks的距离
label_offset = 10p
#设置ticks'label的字体大小
label_size = 20p
</tick>
#设置标尺上的小刻度
<tick>
spacing = 1u
size = 6p
</tick>
</ticks>
######################################################
#下面就是plot部分了,比如我要画一个snp密度图,和gene密度图
<plots>
<plot>
type = line
thickness = 2
max_gap = 1u
file = my_data/wes_snpden.cir.txt
color = vvlpblue
min = 0
max = 1000 #设置y轴的范围,超过的部分显示不了
r0 = 0.75r
r1 = 0.85r
</plot>
<plot>
type = highlight
file = my_data/gene.cir.txt
r1 = 0.95r
r0 = 0.9r
stroke_color = green
stroke_thickness = 0.05
fill_color = green
</plot>
</plots>
######################################################
#以下部分可以不用更改
<image>
<<include etc/image.conf>>
</image>
<<include etc/colors_fonts_patterns.conf>>
<<include etc/housekeeping.conf>>
3. cmd命令行下运行
当然先要cd到指定目录下,再运行程序,比如:
E:\E盘备份\circos\circos-0.69-6\circos-0.69-6\my_circos>..\bin\circos -conf ..\my_conf\circos_test.conf -outputfile test
# E:\E盘备份\circos\circos-0.69-6\circos-0.69-6\my_circos——是我的当前目录
# ..\bin\circos——用相对路径调用circos程序
# -conf ..\my_conf\circos_test.conf——添加配置文件
# -outputfile test——在当前目录下生成名为test的结果文件
之后在当前目录下就能看到两个结果文件了
4. 结果展示
祝各位画图愉快!