circos使用笔记

作者: 井底蛙蛙呱呱呱 | 来源:发表于2018-10-06 20:46 被阅读59次

    circos是用来展示数据的绘图工具,其数据展示方式主要通过配置文件来决定。不同的展示方式可通过不同的配置文件来进行设置,如染色体整体展示,添加刻度,柱状图,热图,添加文本标签,连线显示联系等。

    circos的绘图方式与ggplot或ps相似,都有一些图层叠加的概念于其中,即图形中的每一部分都是通过其中的一个配置文件来设置的,最后将这些单个展示的配置文件加入主配置文件,叠加生成最后的输出图。配置文件的语法有些类似与html格式。

    本文主要简要记录circos通过多环柱状图的绘制来展示比较基因组(多个叶绿体基因组变异信息比较)的结果。内容包括ideogram,ticks,text,histogram,links等图型元素。

    1、ideogram 配置

    将染色体在圈图上展示出来,代表每个染色体的图形,称为ideogram。将以下配置信息放入一个单独的配置文件中,命名为ideogram.conf。

    <ideogram>
    ## 设置ideogram之间的间隙
    <spacing>
    # 设置ideogram之间的间隙大小,以下设置为每个间隙大小为周长的0.1%
    default = 0.001r
    # 也可设置指定的两条染色体之间的间隙
    # <pairwise chrA01;chrA02>
    # 以下设置两条染色体之间的间隙为圆的20度角
    # spacing = 20r
    # </pairwise>
    </spacing>
    ## 设置ideogram
    # 设置ideogram的位置,以下设置为ideogram在离圆心90%处
    radius = 0.90r
    thickness = 6p
    
    # 设置ideogram是否填充颜色,填充的颜色取决于karyotype指定的文件的最后一列
    fill = yes
    
    # 设置ideogram轮廓的颜色及其厚度。如果没有该参数或设定其厚度为0,则表示没有轮廓
    stroke_color = dgrey
    stroke_thickness = 3p
    
    ## 设置label的显示信息
    # 设置是否显示label信息,label信息对应karyotype文件的第四列,如果其值为yes,则必须要有label_radius参数来设置label的位置,否则会报错无法生成结果
    show_label = yes
    
    label_radius = dims(ideogram,radius) + 0.075r
    # 设置label字体
    #label_font = 40
    
    # 设置label字体大小
    label_size = 10
    
    # 设置label的字体方向,yes为易于浏览的方向
    #label_parallel = yes
    
    </ideogram>
    

    其中叶绿体基因组的输入数据文件信息格式为:

    chr -   Chloroplast Chloroplast 0   147050  black
    # 第一列通常是“chr”,是对染色体的描述;
    # 第二列通常是“-”;
    # 第三列为染色体ID;
    # 前三列信息不会展示在图像中,但却是必须的;
    # 第四列是染色体的标签,也即名字,可展示在图像中;
    # 第五列是起始位置;
    # 第六列是结束位置;
    # 第七列是染色体或band的颜色
    

    2、ticks 配置

    将染色体的大小以刻度的形式在圈图上展示出来,将以下配置信息放入到一个独立的配置文件中,命名为ticks.conf。

    # 是否显示ticks
    show_ticks = yes
    
    # 是否显示ticks的labels
    show_ticks_labels = yes
    
    ## 设置ticks
    <ticks>
    # 设置ticks的位置
    radius = dims(ideogram,radius_outer)
    label_offset = 5p
    orientation = out
    # 设置ticks的颜色
    color = black
    
    # 设置ticks的厚度
    thickness = 2p
    
    # 设置ticks label的值的计算,将改刻度时对应的值*multiplier得到展示到全图上的label值
    multiplier = 1e-6
    
    # label值的格式化方法,%d表示结果为整数;%f表示结果为浮点数,%.nf表示结果保留小数点后n位
    format = %d
    
    ## 以下设置了2个ticks,前者是小刻度,后者是大刻度
    <tick>
    # 设置每个刻度代表的长度,若其单位为u,则必须要设置chromosome_units参数,比如设置chromosome_units=1000000,则如下5u表示每个刻度代表5M长度的基因组序列
    spacing = 1u
    show_label = yes
    color = lgrey
    label_size = 10p
    format=%d
    # 设置tick的长度
    size = 10bp
    </tick>
    
    <tick>
    spacing = 5u
    size = 15p
    # 由于设置的是大刻度,以下用于设置展示tick's label
    show_label = yes
    # 设置ticks's label离ticks的距离
    label_offset = 10p
    label_size = 20p
    format = %d
    </tick>
    </ticks>
    

    奇怪的是,上面的设置最后图像并未显示刻度的数字,目前还还没找到原因。

    3、histogram 配置 (gene)

    将基因组序列中的GC含量、表达量等以直方图的形式在圈图中展示出来,将以下配置信息放入到一个单独的配置文件中,命名为plots_histgram_gene.conf,下面绘制了多个直方图,并分别添加背景。

    输入文件格式如下:

    Chloroplast 4110 4184 1 fill_color=green
    Chloroplast 6611 7378 1 fill_color=yellow
    Chloroplast 8867 9170 1 fill_color=yellow
    Chloroplast 16343 16414 -1 fill_color=green
    Chloroplast 16645 18136 -1 fill_color=red
    Chloroplast 18447 19470 -1 fill_color=green
    ...
    # 第一列为染色体ID,与ideogram输入数据文件中的染色体ID要一致;
    # 第二列为起始位置;
    # 第三列为终止位置;
    # 第四列为柱状图的高度,这里设置1,-1是为了方便后面设置柱状图朝内还是朝外;
    # 第五列为可选的,设置color=red,通过配置文件中设置fill=yes画柱状图的边框为红色。这里设置的fill_color=颜色表示柱状图的填充颜色
    

    基因,tRNA,rRNA绘制的配置文件:

    # 将叶绿体基因组中的基因,tRNA,rRNA在图上展示出来,其中基因组环内的为负链上的基因,基因组环外的为正链上的基因
    # 此部分需要对叶绿体注释文件进行处理,基因,tRNA,rRNA分别使用不同的颜色表示
    <plot>
    
    # 设置直方图
    type = histogram
    
    # 数据文件路径
    file = mydata/anno.hist
    
    # 设置直方图的位置,r1要比r0大,直方图方向默认为向外
    r1 = 1.03r 
    r0 = 0.97r
    max = 1  
    min = -1
    orientation = out
    # 填充颜色
    fill = yes
    fill_color = yes
    
    # 设置直方图轮廓,默认为1px
    thickness = 1p
    
    # 直方图是由bins构成的,若bins在坐标轴上不相连,最好设置不要将bins连到一起
    extend_bin = no
    
    </plot>
    

    4、text 配置

    若需要在圈图上显示基因名称,需要以文本形式展示,将以下配置信息放入到一个单独的配置文件中,命名为plots_text.conf。这里分别使用两个配置文件标注正负链上的基因名称,分别命名为plot_text_reverse.conf和plot_text_forward.conf当然也可以将其合并为一个文件。

    其输入文件格式如下:

    Chloroplast 144 515 rpl14
    Chloroplast 627 2218    rpl16
    Chloroplast 2367    3086    rps3
    Chloroplast 3148    3597    rpl22
    Chloroplast 3696    3977    rps19
    Chloroplast 4240    5724    rpl2
    Chloroplast 5743    6024    rpl23
    Chloroplast 6199    6272    trnI
    Chloroplast 9957    10037   trnL
    Chloroplast 10669   12913   ndhB
    ...
    # 第一列为染色体ID,与ideogram输入数据文件中的染色体ID要一致;
    # 第二列为起始位置;
    # 第三列为终止位置;
    # 第四列为要标注到图上的名称
    

    plot_text_forward.conf 文件配置信息:

    <plot>
    # 表示文字
    type = text
    
    # 数据文件路径
    file = mydata/forward.text
    
    # 显示在图形中的位置
    r1 = 1.2r
    r0 = 1.03r
    
    # 标签的字体
    label_font = light
    
    # 标签大小
    label_size = 16p
    
    # 文件边缘的大小,设置较小则不同的单词可能会连在一起
    # padding - text margin in angular direction
    # rpadding - text margin in radial direction
    rpadding = 0p
    padding = 0p
    
    label_snuggle = yes
    max_snuggle_distance = 2r
    snuggle_sampling = 2
    snuggle_tolerance = 0.25r
    #snuggle_link_overlap_test = yes
    snuggle_link_overlap_tolerance = 2p
    #snuggle_refine = yes
    
    # 设置是否需要在label前加一条线用来指出label的位置
    show_links = yes
    links_dims = 0p,2p,5p,2p,2p
    link_thickness = 2p
    link_color = black
    
    </plot>
    

    plot_text_reverse.conf 文件配置信息:

    <plot>
    # 表示文字
    type = text
    
    # 数据文件路径
    file = mydata/reverse.text
    
    # 显示在图形中的位置
    r1 = 1.2r
    r0 = 1.0r
    
    # 标签的字体
    label_font = light
    
    # 标签大小
    label_size = 16p
    
    # 文件边缘的大小,设置较小则不同的单词可能会连在一起
    # padding - text margin in angular direction
    # rpadding - text margin in radial direction
    rpadding = 0p
    padding = 0p
    
    label_snuggle = yes
    max_snuggle_distance = 2r
    snuggle_sampling = 2
    snuggle_tolerance = 0.25r
    #snuggle_link_overlap_test = yes
    snuggle_link_overlap_tolerance = 2p
    #snuggle_refine = yes
    
    # 设置是否需要在label前加一条线用来指出label的位置
    show_links = yes
    links_dims = 0p,2p,5p,2p,2p
    link_thickness = 2p
    link_color = black
    
    </plot>
    

    5、histogram 配置(变异信息配置)

    这里的配置文件与上面的histogram配置大体相似,不同的是这里的每一个plot画的柱状图都是一个朝向。同一个物种叶绿体基因组的snp数量信息都是朝着内部的,而indel则是朝内,snp使用一个<plot>...</plot>,而indel信息同样使用一个<plot>...</plot>。为方便直观的比较多个基因组的变异信息,需要先找出所有物种中所有window(这里的500bp为一个window计算其中的snp和indel数量)内的最大变异数量,以方便在配置文件中设置max值,也即柱状图的最大值。

    其中一个物种的snp数据的输入文件如下:

    Chloroplast 0   500 29  fill_color=lgrey
    Chloroplast 500 1000    25  fill_color=lgrey
    Chloroplast 1000    1500    39  fill_color=lgrey
    Chloroplast 1500    2000    42  fill_color=lgrey
    Chloroplast 2000    2500    37  fill_color=lgrey
    Chloroplast 2500    3000    25  fill_color=lgrey
    ...
    # 第一列为染色体ID,与ideogram输入数据文件中的染色体ID要一致;
    # 第二列为起始位置;
    # 第三列为终止位置;
    # 第四列为当前window的snp数量;
    # 第五列为柱状图的填充颜色
    

    indel数据输入与snp输入相同,因此不在细述。

    下面是一个物种的snp和indel变异信息的配置文件:

    ########################################################################
    <plot>
    
    # 设置直方图
    type = histogram
    
    # 数据文件路径
    file = mydata/Hordeum.snp.count.hist
    
    # 设置直方图的位置,r1要比r0大,直方图方向默认为向外
    r1 = 0.78r 
    r0 = 0.72r
    max = 60
    min = 0
    orientation = out
    # 填充颜色
    fill = yes
    fill_color = yes
    
    # 设置直方图轮廓,默认为1px
    thickness = 1p
    
    # 直方图是由bins构成的,若bins在坐标轴上不相连,最好设置不要将bins连到一起
    extend_bin = no
    
    # 添加背景
    <backgrounds>
    <background>
    background_stroke_color = dark
    color = vvlblue
    </background>
    </backgrounds>
    
    # 添加坐标轴
    <axes>
    show = data
    thickness = 1
    color = lblue
    <axis>
    spacing = 0.2r
    </axis>
    </axes>
    
    </plot>
    
    #############################################################################
    <plot>
    
    # 设置直方图
    type = histogram
    
    # 数据文件路径
    file = mydata/Hordeum.500.indel.count.hist
    
    # 设置直方图的位置,r1要比r0大,直方图方向默认为向外
    r1 = 0.72r 
    r0 = 0.68r
    max = 8
    min = 0
    orientation = in
    # 填充颜色
    fill = yes
    fill_color = yes
    
    # 设置直方图轮廓,默认为1px
    thickness = 1p
    
    # 直方图是由bins构成的,若bins在坐标轴上不相连,最好设置不要将bins连到一起
    extend_bin = no
    
    # 添加背景
    <backgrounds>
    <background>
    background_stroke_color = dark
    color = vvlblue
    </background>
    </backgrounds>
    
    # 添加坐标轴
    <axes>
    show = data
    thickness = 1
    color = lblue
    <axis>
    spacing = 0.2r
    </axis>
    </axes>
    </plot>
    

    可以看到snp和indel的plot的区别是orientionout还是in。当然还有另一种可以将snp、indel设置在一个plot的方法是将indel的数量那一列设置为负值(相当于oriention=in),此时的min也要相应的改成indel的最大值的负值。

    最后我们还要对图中信息,做一些修改,因为有的基因组中存在大片段的indel,这时还对该区间计算变异数量无疑是不宜的,这里我们表示的方法是删除大片段indel的window统计信息,然后替换成大片段indel的位置信息,其中他的统计值设置成最大值(这样在图中就可明显观察到缺失片段信息),颜色也最好设置成不同的,这里设置为黑色:

    Chloroplast 7979    8874    60  fill_color=black
    Chloroplast 58023   58917   60  fill_color=black
    

    6、links.conf 配置

    基因组内部不同的序列区域之间有联系,将之使用线条进行连接,从而展示到圈图上,常见的是重复序列之间的连接,将以下配置信息放入到一个独立的配置文件中,命名为links.conf。叶绿体基因组的基因可分为三种类型:rRNA, tRNA, gene。分别使用三种颜色将不同种类的基因连接起来。

    输入文件格式:

    Chloroplast 4110    4184    Chloroplast 16343   16414
    Chloroplast 4110    4184    Chloroplast 18447   19470
    Chloroplast 4110    4184    Chloroplast 19536   20420
    ...
    # 第一列为连线的起始位置染色体;
    # 第二列为连线的起始位置染色体上的起始位置;
    # 第三列为连线的起始位置染色体上的终止位置;
    # 第四列为连线的终止位置染色体;
    # 第五列为连线的终止位置染色体上的起始位置;
    # 第六列为连线的终止位置染色体上的终止位置;
    

    links.conf 文件:

    <links>
    #################################################
    <link>
     
    # 指定link文件路径,其数据格式为:
    # chr1 start1 end1 chr2 start2 end2
    file = mydata/tRNA.links.data
     
    # 设置links曲线的半径
    radius = 0.31r
     
    # 设置贝塞尔曲线半径,该值越大越扁平,不好看
    bezier_radius = 0r
     
    # 设置link曲线的颜色
    color = grey
    
    # 设置link曲线的厚度
    thickness = 2
     
    </link>
    </links>
    

    这里只画了其中一个类型(tRNA)的连线,其余的设置相同,只是颜色和输入文件不同。
    最后,本来还想将重复基因连接起来,但是设置了却没有显示?原因是被后面的<link>gene.links</link>给覆盖,因为他每一个配置文件模块都相当与一个图层,后面的是会将前面的覆盖的。

    7、circos.conf 主配置文件设置

    circos命令的输入文件只有一个,也就是我们的主配置文件,在我们的主配置文件中既放了我们上面的各个展示数据的配置文件,也又一些必须的但是不常修改的文件。

    本文例子的主配置文件circos_vars.conf如下:

    karyotype = mydata/cp_genome.txt
    
    # 设置长度单位
    chromosomes_units = 1000
    
    # 设置默认展示所有染色体,这里是所有基因
    chromosomes_display_default = yes
    
    <<include ideogram.conf>>
    <<include ticks.conf>>
    
    # 展示数据
    <plots>
    <<include plot_histgram_gene.conf>>
    <<include plot_text_forward.conf>>
    <<include plot_text_reverse.conf>>
    <<include plot_hist_vars.conf>>
    </plots>
    
    # 插入必须的但不常修改的标准参数
    <image>
    <<include etc/image.conf>>
    # 修改默认的输出文件名称
    file* = vars.png
    </image>
    
    <<include etc/colors_fonts_patterns.conf>>
    <<include etc/housekeeping.conf>>
    

    最后通过circos -conf circos_vars.conf绘制图片。
    热图,散点图的绘制与柱状图绘制类似,掌握了其中一种方式,其余的学起来便会得心应手。
    结果图片如下:

    vars.png

    参考:
    Circos配置文件
    circos官方文档
    中文颜色名称与RGB颜色对照表 常用颜色的网络编码及中英文名称
    颜色

    相关文章

      网友评论

        本文标题:circos使用笔记

        本文链接:https://www.haomeiwen.com/subject/ecihaftx.html