转载科学网文章-circos教程二

http://blog.sciencenet.cn/blog-442719-758826.html

本节的目标就是画出如下的图

circos绘制简单的ideogram

 

基础:circos作业流程

circos流程图

 

定义:
The symbolic representation of chromosomes are called ideograms.

circos为了能准确地画出染色体示意图,染色体的定义,位置,大小,以及显示的形式都是circos需要考虑的。这些要素需要在数据文件当中定义出来。

数据结构
染色体组型(karyotypes)是一类特殊的数据。一般的,它保存在名为xx.karyotype.txt文件当中。它将定义染色体的大小,ID,名称和颜色。每一行一条染色体,格式如下:

chr- ID LABEL START END COLOR

最开始的chr表示,这一行将定义一个染色体。然后是一个短线占位符。这个占位符通常用来定义所属关系,对于染色体来说,没有所属。
ID是染色体唯一且不能重复的标识。之后的LABEL是将来用于显示在图上的文本。如果一个染色体组型文件里面包含多个不同来源的染色体组,设置ID最好的办法就是使用前缀。比如hs=homo sapiens, mm=mus musculus等等。有时候你可以使用hs19做为前缀来明示数据来源版本。其实,即使是只有一个来源的染色体组,也最好使用前缀,以规范文件格式。
START和END值定义了染色体的大小。对于染色体组型文件,需要指明的是,这里的START和END应该是染色体本身的大小,而不是你想绘制部分的起止位置。指定绘制部分将由其它文件来定义。
COLOR是于定义显示的颜色。如果染色体组不以条纹(cytogenetic bands)图谱覆盖的话,那么就会以这里设置的颜色显示。对于人类基因组而言,circos预设了与染色体相同的名字做为颜色名,比如chr1, chr2, … chrX, chrY, chrUn.
下面就是hg19的例子:

chr- hs1 hs1 0249250621 chr1 chr- hs2 hs2 0243199373 chr2 chr- hs3 hs3 0198022430 chr3 chr- hs4 hs40191154276 chr4 chr- hs5 hs5 0180915260 chr5 chr- hs6 hs6 0171115067 chr6 chr- hs7 hs7 0159138663 chr7 chr-hs8 hs8 0146364022 chr8 chr- hs9 hs9 0141213431 chr9 chr- hs10 hs10 0135534747 chr10 chr- hs11 hs110135006516 chr11 chr- hs12 hs12 0133851895 chr12 chr- hs13 hs13 0115169878 chr13 chr- hs14 hs140107349540 chr14 chr- hs15 hs15 0102531392 chr15 chr- hs16 hs16 090354753 chr16 chr- hs17 hs17 081195210chr17 chr- hs18 hs18 078077248 chr18 chr- hs19 hs19 059128983 chr19 chr- hs20 hs20 063025520 chr20 chr- hs21 hs21 048129895 chr21 chr- hs22 hs22 051304566 chr22 chr- hsx hsx 0155270560 chrx chr- hsy hsy 059373566chry

一般的,我们都会在染色体组型文件当中加上条纹图谱的信息,这样才会让染色体图谱看上去有被染色的效果。文件格式与之前的一致,也只有七列。

band DOMAIN ID LABEL START END COLOR

这里的DOMAIN就是染色体组型当中的ID就好了,其它的定义与前面的一致。下面就是一个例子。

band hs1 p36.33 p36.33 02300000 gneg band hs1 p36.32 p36.32 23000005400000 gpos25 band hs1 p36.31 p36.3154000007200000 gneg band hs1 p36.23 p36.23 72000009200000 gpos25 band hs1 p36.22 p36.22920000012700000 gneg band hs1 p36.21 p36.21 1270000016200000 gpos50 band hs1 p36.13 p36.131620000020400000 gneg band hs1 p36.12 p36.12 2040000023900000 gpos25 band hs1 p36.11 p36.112390000028000000 gneg band hs1 p35.3 p35.2800000030200000 gpos25 band hs1 p35.2 p35.23020000032400000 gneg band hs1 p35.1 p35.3240000034600000 gpos25 band hs1 p34.3 p34.33460000040100000 gneg band hs1 p34.2 p34.4010000044100000 gpos25 band hs1 p34.1 p34.14410000046800000 gneg band hs1 p33 p33 4680000050700000 gpos75 band hs1 p32.3 p32.5070000056100000gneg band hs1 p32.2 p32.5610000059000000 gpos50 band hs1 p32.1 p32.5900000061300000 gneg band hs1 p31.3 p31.6130000068900000 gpos50 band hs1 p31.2 p31.6890000069700000 gneg band hs1 p31.1 p31.16970000084900000 gpos100 band hs1 p22.3 p22.8490000088400000 gneg band hs1 p22.2 p22.28840000092000000 gpos75 ...

cytogenetic bands的名称例子:1p36.33 其命名规则是之前的数字、字母为染色体代号,一般是数字或者X,Y。而之后会有字母p或者q。p代表短臂,q代表长臂。而每个band都会有颜色深浅的不同,这里主要以gpos和gneg来区别。为了和真实值更接近,circos还定义了一系列的灰度。

染色体组型定义

 

设置文件
circos的设置文件可以分为多个文件,也可以只写在一个文件里。一般地,为了人们阅读方便,都会写在多个文件,每个文件描述不同的部分,最后由一个主文件来调用就可以了。
这一节,需要设置三个方面,一,数据源,二如何画染色体,三如何画坐标,所以我们也将它分为三个文件,分别名为circos.conf, ideogram.conf,和ticks.conf。由circos.conf来定义数据源,并调用ideogram.conf和ticks.conf。

circos.conf的内容

<colors> white =255,255,255 black =0,0,0 blue =0,0,255<<include etc/colors.ucsc.conf>></colors> <fonts><<include etc/fonts.conf>></fonts> <<include ideogram.conf>><<include ticks.conf>> <image><<include etc/image.conf>></image> # specify the karyotype file here karyotype = karyotype.human.hg19.txt chromosomes_units =1000000 chromosomes_display_default = yes <<include etc/housekeeping.conf>>

这里可以注意到它引入其它文件时使用的是<>的方式。注意,这里include会从circos所在的目录开始寻找,而不是当前目录。我们可以在circos的安装目录当中找到一个名为etc的目录,可以点击查看其中的colors.ucsc.conf,image.conf,以及housekeeping.conf的内容。

在circos当中使用karyotype=xxx语句来定义了karyotype的数据来源。chromosomes_units=1000000定义了基准单位。可以试着把这个值扩大10倍。

接下来我们看ideogram.conf。在ideogram.conf文件中,定义了如何显示染色体组型。

<ideogram> <spacing> default = 0.005r break = 5u </spacing> #position configuration radius = 0.90r thickness =100p fill = yes fill_color = black stroke_thickness =2 stroke_color = black #label configuration show_label = yes label_font = bold label_radius = dims(ideogram,radius)+ 0.07r label_with_tag = yes label_size =36 label_parallel =no#band configuration show_bands = yes fill_bands = yes band_stroke_thickness =2 band_stroke_color = white band_transparency =0 </ideogram>

在ticks.conf当中定义了如何来绘制刻度。

show_ticks = yes show_tick_labels = yes <ticks> skip_first_label =no skip_last_label =no radius =dims(ideogram,radius_outer) tick_separation = 3p label_separation = 1p multiplier = 1e-6 color = black thickness = 4p size = 20p <tick> spacing = 1u show_label =no thickness = 2p color = dgrey </tick> <tick> spacing = 5u show_label=no thickness = 3p color = vdgrey </tick> <tick> spacing = 10u show_label = yes label_size = 20p label_offset = 10pformat=%d grid = yes grid_color = dgrey grid_thickness = 1p grid_start = 0.5r grid_end = 0.999r </tick></ticks>

好了,有了这些文件,我们就可以让程序跑起来了。

/path/to/circos/bin/circos -conf ./circos.conf

circos绘制简单的ideogram

嗯,图型是出来了。可是这些参数设置具体指的是什么呢?如何改变它才能达到我们需要的效果呢?

第一个问题,如何显示部分染色体,如何显示染色体的一部分,如何截段显示染色体,如何按自定义的顺序来显示?

显示部分染色体
前面我讲过,在染色体组型文件中需要写入染色体的正确大小,而不是自己想画的那一部分。而设置画哪些染色体,画染色体的哪部分,都应该在设置文件中来阐明。
在circos.conf文件中有一句chromosomes_display_default = yes,它的意思就是显示所有的染色体。如果只需要显示部分染色体,我们先注释掉这一行,而后使用
chromosomes = hs1;hs2;hs3这样的语句来指定需要显示的染色体。hs1,hs2,sh3都是染色体组型文件当中的id。
原语句

chromosomes_display_default = yes

替换成

chromosomes = hs1;hs2;hs3

使用 chromosomes = hs1;hs2;hs3这样的语句来指定需要显示的染色体

如果只想去掉其中的一两条染色体,上面的写法又太麻烦了。circos提供了”-”运算符。
原语句

chromosomes_display_default = yes

替换成

chromosomes =-hs1;-hs2;-hs3 chromosomes_display_default = yes

这样的就是不显示hs1,hs2,hs3。

不显示hs1,hs2,hs3

 

显示染色体的一部分
一条染色体,只想显示它的一小截,需要使用chromosomes = …;ID:START-END;…这样的定义。比如只希望显示hs1的0~100Mb, hs2的50~150Mb,h3的50~100Mb应该是
原语句

chromosomes_display_default = yes

替换成

chromosomes = hs1:0-100;hs2:50-150;hs3:50-100;hs4;hs5;hs6;hs7;hs8

显示hs1的0~100Mb, hs2的50~150Mb,h3的50~100Mb

奇怪的是这里的起止数字并没有单位,难道是默认的以Mb为单位吗?并不是这样的。因为我们在circos.conf文件中定义有chromosomes_units = 1000000,它才会以Mb为单位显示。在circos的绘图单位中,有一个u单位,这个u就是指的chromosomes_units了。如果你将chromosomes_units设置成10M,那么上面的语句就需要改成hs1:0-10…这样子。

嗯,有没有象前面一样的”-”运算符呢?有的。
原语句

chromosomes_display_default = yes

替换成

chromosomes = hs1;hs2;hs3;hs4;hs5;hs6;hs7;hs8 chromosomes_breaks =-hs1:100-200;-hs2:0-50;-hs2:150-);-hs3:0-50

 

chromosomes_breaks = -hs1:100-200;-hs2:0-50;-hs2:150-);-hs3:0-50


其中”)”表示染色体的末端。

 

段点显示不明显啊。这需要我们来定义一个段点显示的方式。在ideogram.conf文件中<spacing>…</spacing>加入下面的语句

axis_break = yes axis_break_style =1 axis_break_at_edge = yes <break_style 1> stroke_color = black fill_color = blue thickness = 0.25r stroke_thickness =2</break_style>

就可以定义出蓝色的轴线了。其中,axis_break_style后面设置的数值就是自己定义的<break_style ..>当中的数值。

定义一个段点显示的方式

 

我们也可以结合着”chromosomes”和”chromosomes_breaks”来显示,这样可以更方便的控制复杂的段点。比如

chromosomes = hs1:0-100;hs2:0-100;hs3:0-100;hs4:0-100;hs5;hs6;hs7;hs8 chromosomes_breaks =-hs1:25-75;-hs2:25-75;-hs3:25-75;-hs4:25-75;-hs5:75-);-hs6:75-);-hs7:75-);-hs8:75-)

控制复杂的段点

自定义顺序显示
自定义顺序使用chromosomes_order来定义。假设我们设置chromosomes=hs1;hs2;hs3;hs4;hs5;hs6;hs7;hs8。我们使用

chromosomes_order = hs2,hs3,hs1,hs5,hs4,hs8,hs7,hs6

可以得到2,3,1,5,4,8,7,6的顺序。

得到2,3,1,5,4,8,7,6的顺序

 

有的人可能觉着这种方法太麻烦了,如果我们希望hs4显示在hs5之后,这种相对顺序的设置可以使用

chromosomes_order = hs5,hs4

hs4显示在hs5之后

但是我们发现,这显示出来的顺序是1 2 3 6 5 4 7 8,也就是说,5后面的6先被拿出来,将4放入,4的位置空了,于是把6放到4的位置上去了。如果我们需要的是1 2 3 5 4 6 7 8这样子的顺序,也就是说只是换一下4和5的顺序的话,就需要把3也设置进来。思考的方式是先将4空出来,把5放在4的位置,然后把4放进5的位置,可以使用

chromosomes_order = hs3,hs5,hs4

顺序是1 2 3 6 5 4 7 8

如果我们想将某个,或者某几个染色体放在最前面或者最后面,可以使用^或者$定位符。比如

chromosomes_order =^,hs5

就是让hs5显示在第一位。
使用^定位符

chromosomes_order = hs5,$

就是让hs5显示在最后一位。

使用$定位符

 

如果我们想将hs3和hs2间隔一位显示,可以使用chromosomes_order = hs3,-,hs2。但是这样显示的结果是4 5 3 1 2 6 7 8。排序过程是把hs3做为锚定点,先将它后面的两位空出来,然后将hs2和它前面的一位放入,再把空出来的两个位置补满。如果想分组显示,可以使用chromosomes_order = hs3,hs2,|,hs8,hs1这样的行式。但是我个人认为这些排序方式作用并不是很大,因为它的排序过程并不是那么直观,反而不是直接依次写入来得直接。

第二个问题,如何设置间隔?

设置间隔

我们前面已经了解到了一些,在ideogram.conf文件中<spacing>…</spacing>就是用于设置间隔的,也了解到什么是u单位。在circos中,除了u单位,还有一个r单位。r是relative的首字母,它是指相对于全图的大小。比如本文中使用的deault = 0.005r就是使用的r单位。我们可以将u视作绝对单位,把r视作相对单位。

10u单位


0.1r单位

 

如何设置某两个之间的间隔与其它的不同呢?我们可以使用<pairwise>标签来定义。比如

<spacing> default = 0.005r #default = 10u<pairwise hs1;hs2> spacing = 0.25r </pairwise><pairwise hs3> spacing =15u </pairwise></spacing>

就会让hs1和hs2之间变得很小,而hs3两端固定为15u。

让hs1和hs2之间变得很小,而hs3两端固定为15u

 

第三个问题,如何修改染色体名字和显示位置?

染色体的名称及名称位置
染色体的名称,实际上是由染色体组型文件设定的。在设置文件中,我们可以更改的是它的后缀,并不能修改名称本身。如果需要变换名称本身,需要直接修改染色体组型文件的ID值。

在前面的例子中,有分段显示染色体的,如果染色体有多段的话,它们的标签都是一样的,这样并不容易识别,如果顺序再打乱的话,就更加能以分别。我们可以使用更改后缀的方式来让显示的区分变得明显。比如

chromosomes = hs1[a]:0-50;hs1[b]:150-);hs2[c]:0-50;hs2[d]:150-);hs3[e] chromosomes_order =^,a,c,e,|,b,$

更改后缀的方式来让显示的区分变得明显

我们可以使用

<ideogram> label_with_tag =no</ideogram>

来关闭染色体名称的显示。

如果我们希望变换名称显示的位置,可以通过label_radius,label_center以及label_parallel等参数来设置。其中label_radius使用到了一个函数dims(),它的意思就是尺度(Dimension),它有两个参数,一个是计算谁的尺寸,一个是计算哪一部分的尺寸。比如dims(ideogram,radius_inner),就是指ideogram设置当中radius_inner的值。而dims(ideogram,radius_outer)就是指ideogram设置当中radius_outer的值。通常的label_center都是no,也就是外对齐的,如果设置它为yes,就是居中对齐了。
假设我们将ideogram.conf当中的

label_radius = dims(ideogram,radius)+ 0.07r

改变为

label_radius = dims(ideogram,radius_inner)- 0.07r

变换名称显示的位置

如果我们设置

label_parallel = yes

label_parallel = yes

我们打开etc/image.conf会发现它链接了etc/image.generic.conf设置文件,在后者当中,它设置了angle_offset = -90。这就是为什么排在第一位的染色体总是从图像的最上方开始显示。circos对角度的解释是这样的:

-90|180--+--0|90

该文件还可能设置有angle_orientation = counterclockwise,它的意思是反时针方向排布。默认值为”clockwise”。

染色体的位置
我们可能会觉得,染色体画得是不是太靠边了,有没有办法让它往中间靠靠呢?只需要修改<ideogram>中的radius参数就可以了。试着将

radius = 0.90r

修改为

radius = 0.50r

染色体的位置

如果希望画逐一设置染色体的所画的半径呢?
修改

chromosomes_display_default = yes

chromosomes = hs1;hs2;hs3;hs4;hs5;hs6;hs7;hs8;hs9;hs10 chromosomes_radius =hs1:0.5r;hs2:0.55r;hs3:0.6r;hs4:0.65r;hs5:0.7r;hs6:0.75r;hs7:0.8r;hs8:0.85r;hs9:0.9r;hs10:0.95r

逐一设置染色体的所画的半径

如果觉着它画得太粗了,换细一点呢?修改

thickness = 100p

thickness = 50p

换细一点

第四个问题,如何只画染色体,不填充条纹呢?

只需要设置ideogram.conf当中show_bands=no就可以了。如果想显示条纹,但不填充,设置show_bands=yes, fill_bands=no就可以了。但实用性不大。

如果想设置填充条纹的不透明度呢?设置band_transparency为大于0的整数即可。比如设置为2。于是我们得到七彩的染色体图谱。

设置填充条纹的不透明度

 

第五个问题,如何设置坐标刻度?

这是一个比较复杂的问题。以后会专门介绍。这里就只解释一下结构。
show_ticks是否显示刻度
show_tick_labels是否显示刻度字符
然后使用<ticks>来定义每一种刻度。

本文内代码下载:
ideograms

 

http://pgfe.umassmed.edu/ou/archives/2519



http://blog.sciencenet.cn/blog-442719-758826.html    此文来自科学网黄顺谋博客
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CIRCOS 是用于可视化循环图的软件工具。如果你想从零开始学习 CIRCOS,以下是一些步骤和资源可以帮助你入门: 1. 了解 CIRCOS:首先,你需要了解 CIRCOS 的基本概念和用途。CIRCOS 主要用于可视化循环数据,如基因组比对、染色体相互作用等。你可以阅读官方站(http://circos.ca/)上的文档,了解其功能和使用方式。 2. 安装 CIRCOS:在学习 CIRCOS 之前,你需要在你的计算机上安装 CIRCOS。官方站上有详细的安装指南,根据你的操作系统选择适合的安装方法。 3. 学习语法和配置文件:CIRCOS 使用自己的配置文件来定义图表的外观和数据的呈现方式。你需要学习 CIRCOS 的语法和配置文件结构。官方站提供了详细的文档和示例,你可以按照文档逐步学习和实践。 4. 练习使用示例:CIRCOS 官方站上提供了许多示例配置文件和数据,你可以下载并尝试运行这些示例。通过实际操作,你可以更好地理解和掌握 CIRCOS 的使用方法。 5. 探索其他资源:除了官方站,你还可以寻找其他学习资源,如教程、博客文章和视频教程。这些资源可以帮助你更深入地了解 CIRCOS 的高级功能和应用场景。 总的来说,学习 CIRCOS 需要一定的时间和实践经验。通过阅读文档、尝试示例和不断练习,你可以逐步掌握 CIRCOS 的使用技巧,并能够创建出令人满意的循环图可视化效果。祝你学习顺利!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值