搜索
查看: 3944|回复: 3

Python版 极简单方式实现 Circos

[复制链接]

4

主题

24

帖子

184

积分

注册会员

Rank: 2

积分
184
发表于 2017-11-11 13:25:08 | 显示全部楼层 |阅读模式
本帖最后由 tsznxx 于 2017-11-11 13:25 编辑

人生苦短,我用Python!

之前用过Perl版的circos,配置文件一堆,安装包一堆,非常痛苦。后来也试过R版的circos,也并不方便。于是自己花时间用Python实现了这个东西。代码一共200多行,大概一半是注释行。还有部分是优化呈现。基本功能的实现极其简单。

1. Packages  (git@github.com:tsznxx/PyCircos.git
Python版本2.7.
用到的只有3个基本包:matplotlib,pandas,numpy。这些都是Pythonb必装包。没有任何其他额外的包!!!

2. 实现技巧
   2.1 matplotlib 的polar 画图。
        说白了就是按照极坐标的形式画常规的matplotlib图。
         
[Python] 纯文本查看 复制代码
pax = fig.add_axes([0,0,1,1],polar=True)

         然后就可以像普通2D的axis对象一样call各种bar,scatter,fill_between, vlines, hlines等图了。参数上有细微的差别,角度(弧度单位)是横坐标,半径方向是纵坐标。
         染色体band 用pax.bar() (填充和非填充两种方式)
         刻度用pax.vlines()
         CNV的图用的是pax.fill_between()
   2.2 画inter-chrom link
         这个用的是SVG里面的路径Path里的CURVE3(这个功能很简单,在Javascript的SVG画图里面很常用,但是由于我很少用JavaScript,我花了好久才找到这种实现方式)。CURVE3的意思就是由3个点确定一条曲线(quadratic Bézier curve),(起点,控制点,终点)。控制点是表示切线方向。

CURVE3
2 (1 control point, 1 endpoint)
Draw a quadratic Bézier curve from the current position, with the given control point, to the given end point.


         对于一条路径,就是一组点组成的闭合曲线:(起点,控制点1,点2,控制点2,。。。,点N,控制点N,起点)。我们所见的inter-chrom 链接就可以用9个点组成一条闭合曲线(chord):



3. 画图

当呈现方式就绪后,下一步就是做图了。
cytoband是用的UCSC的文件。
   3.1 画染色体cytoband (barplot,颜色采用的是R里面的染色体配色)
   3.2 画染色体空框(barplot, {'edgecolor':'k','linewidth':1,'linestyle':'-','fill':False})
3.3 画 ticks (每50M为间隔,刻度用M表示)
3.4 画染色体名字 (旋转)
3.5 画CNV amplification (fill_between, 低于cutoff用灰色表示)
3.5 画CNV deletion (fill_between, 负值,向内画,低于cutoff用灰色表示)
3.6 因为这里并用不到inter-chromosome interaction,我只是随便画了2个link作为例子。注:染色体内部的控制点我偷懒,直接用了半径,所以靠近染色体的弧线有些平(以后有空了改下)。
最终效果图:
















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x



上一篇:YouTube视频下载的23种方法大集合
下一篇:为什么这个数据不可以用gcrma算法进行预处理?
回复

使用道具 举报

0

主题

2

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2017-12-6 17:01:29 | 显示全部楼层
本帖最后由 -86- 于 2017-12-6 17:25 编辑

你好,刚刚装好的时候我得到的是楼主的结果,可是后面就只有chr1和chr2有Amp显示,只有chr1 0刻度的位置有del蓝色线条显示。其它位置的都是空的没有Amp和del 颜色的显示,请问是什么原因?谢谢楼主!
回复 支持 反对

使用道具 举报

4

主题

24

帖子

184

积分

注册会员

Rank: 2

积分
184
 楼主| 发表于 2017-12-21 06:21:50 | 显示全部楼层
-86- 发表于 2017-12-6 17:01
你好,刚刚装好的时候我得到的是楼主的结果,可是后面就只有chr1和chr2有Amp显示,只有chr1 0刻度的位置有d ...

这只是个demo,我在显示的时候只显示了top100的信息,你看代码那块。把那个去掉就行了。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2017-12-21 16:04:43 | 显示全部楼层
tsznxx 发表于 2017-12-21 06:21
这只是个demo,我在显示的时候只显示了top100的信息,你看代码那块。把那个去掉就行了。 ...

谢谢楼主,我再看看代码块
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树    

GMT+8, 2019-6-20 05:50 , Processed in 0.029742 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.