比较基因组学中,共线性的分析的图无疑是最漂亮的。

共线性分析可以很好地解释进化关系和多倍化事件。

本文主要介绍的是唐老师的Python版McScan(jcvi工具包),这个包很强大,但是其功能在官网的说明并不详细,在众人的博客中也比较零散。

我刚使用这个包的时候(2017年)还很难安装,需要预装各种依赖,不过现在的同学们很幸福了,可以直接用pip一键安装了。

软件包链接:https://github.com/tanghaibao/jcvi

安装过程很简单:

pip install jcvi
pip install git+git://github.com/tanghaibao/jcvi.git

如果安装不成功,再执行一次上述命令即可。
python 用conda安装即可。
官方配图如下:

鄙人拙作如下:


本文其实并没有想用常规的方法告诉同学们怎么用,我只是想告诉同学们一键生成最终结果的办法:

1. 两两物种之间的共线性分析和画图:
诸君只需要准备好下载好的两个需要比对的基因组序列文件和注释文件(species.gff),进行格式化:
#下载基因组相关数据
get-genome.pl
#格式化基因组序列文件
format_fa.pl
#格式化基因组注释文件
format_gff.pl
#共线性画图
perl synteny-jcvi.shell.pl species1 species2
#统计共线块的分布情况
stat_block.pl

2. 多物种基因组序列比对,保守序列/区域画图(准备好lastz软件,不需要准备注释文件)
# 获得物种两两比对结果
lastz-axt.sh reference species
# 获得多序列比对结果
roast tree *sing.maf roast.maf
# 获得各物种与reference的比对矩阵

cat roast.maf| awk 'BEGIN {OFS = "\t"} ; {if ($1~/a/){m++}}{if ($5 == "+") print $2, $3, $3 + $4, $2"-common_"m"\t0\t"$5; else print $2, $6 - $3 - $4, $6 - $3, $2"-common_"m"\t0\t"$5}' | grep -P "^\S" | grep -v score > mostcons.bed

grep Whear_chinese mostcons.bed | awk '{if ($3-$2 >= 2000){print }}' | perl -ne 'print "$1\n" if /(common_\d+)/' > Whear_chinese.2k.id

rm mostcons.bed.2k

for i in `cat Whear_chinese.2k.id`;do grep -P "$i\t" mostcons.bed >> mostcons.bed.2k  ;done

for i in `cut -f 1 mostcons.bed.2k | sort | uniq`;do grep $i mostcons.bed.2k > $i.bed ; done

sortBed -I mostcons.bed.2k > mostcons.bed.2k.sort

# 生成配置文件

perl anch.pl mostcons.bed.2k.sort

# 画多序列共线性图(如下,可以直观看到倒位,缺失等重要信息)
python -m jcvi.graphics anchors seqids layout
3. 多物种基因共线性图(准备好blastp软件,需要gff注释文件)
# blastp比对
# 获取各物种与reference的RBH比对矩阵
# 生成配置文件(anchors文件由RBH矩阵替换)
perl anch.pl mostcons.bed.2k.sort
# 画图
python -m jcvi.graphics anchors seqids layout


本操作流程节约了各种配置编辑和试错的时间和精力,增加了无注释文件或者非编码区(全基因组序列,而非仅基因区)的共线性分析。
注意事项:
1. 虽然可以conda一键安装python,pip一键安装jcvi,但是如果有依赖在运行两次jcvi操作后还是无法安装,请手动安装。
2. 注意所有文件严格在第一步的时候进行严格地格式化,请文件中不要出现特殊字符,尽量只有数据/字母/下划线。
3. 如果要添加颜色,请在矩阵中加上注释(红色:r*;黄色:y*)
*. 有任何BUG,请及时与管理员联系。

脚本将陆续上传于网站cospure.cn和github中。
本博客主要用于前期,后期整理请关注微信公众号swxxfxxx。

生物信息-McScan(Python-jcvi)共线性画图的更多相关文章

  1. python使用matplotlib画图

    python使用matplotlib画图 matplotlib库是python最著名的画图库.它提供了一整套和matlab类似的命令API.十分适合交互式地进行制图. 先介绍了怎样使用matplotl ...

  2. 如何在Python中快速画图——使用Jupyter notebook的魔法函数(magic function)matplotlib inline

    如何在Python中快速画图--使用Jupyter notebook的魔法函数(magic function)matplotlib inline 先展示一段相关的代码: #we test the ac ...

  3. 炼数成金数据分析课程---10、python中如何画图

    炼数成金数据分析课程---10.python中如何画图 一.总结 一句话总结: 主要matplotlib库,pandas中也可以画一些基础图 大纲+实例快速学习法 1.matplotlib的最简单画图 ...

  4. python 学习5--matplotlib画图实践

    ### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 学习参考: http://www.cnblogs.com/vamei/archive/2013/01/30/28 ...

  5. python matplotlib.plot画图显示中文乱码的问题

    在matplotlib.plot生成的统计图表中,中文总是无法正常显示.在网上也找了些资料,说是在程序中指定字体文件,不过那样的话需要对plot进行很多设置,而且都是说的设置坐标轴标题为中文,有时候图 ...

  6. Python中的画图初体验

    学到<父与子编程之旅>的16章了,跟书上的例子进行学习,学会了画圆,我又找到了画线的方法,于是就可以在screen上画日本国旗了: 手动画的不好看,也可以不手动画,直接画线: 当然也可以直 ...

  7. pylab.show()没有显示图形图像(python的matplotlib画图包)

    no display name and no $DISPLAY environment variable ============================ @Neil's answer is ...

  8. python中matplotlib画图

    参考 https://blog.csdn.net/u010358304/article/details/78906768 https://www.cnblogs.com/onemorepoint/p/ ...

  9. 用python的turtle画图

    画5个红色的同心圆代码如下: import turtle turtle.pencolor("red") # 设置画笔的颜色 turtle.pensize() # 设置画笔的宽度 t ...

随机推荐

  1. 解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问题。

    解决Mysql连接池被关闭  ,hibernate尝试连接不能连接的问题. (默认MySQL连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池. 所以系统发布第二天访问会 ...

  2. FineUI Grid控件高度自适应

    引言 页面里使用f:Grid控件,添加分页功能,然后高度填充整个页面. 如何使用 使用FineUI 控件的每个页面都有一个f:PageManager控件,它包含属性:AutoSizePanelID,设 ...

  3. 将Excel导入数据库

    在Control 中: public ActionResult ImportExcel() { return View(); } //客户导入 [HttpPost] public ActionResu ...

  4. asp.net动态添加GridView的模板列,并获取列值

    一.动态添加模板列: 1.建立模板列样式: 说明:下边代码可以直接写在aspx文件中,也可以单独建立cs文件:另外,我没有写button.linkButton等控件,意思差不多,不过当需要添加事件时, ...

  5. 【转】AVL

    #include <iostream> #include <ctime> #include <queue> #include <cassert> #in ...

  6. C语言关键字-volatile

    1.C语言关键字volatile     C 语言关键字volatile(注意它是用来修饰变量而不是上面介绍的__volatile__)表明某个变量的值可能在外部被改变,因此对这些变量的存取 不能缓存 ...

  7. [置顶] Objective-C ,ios,iphone开发基础:在UITextField输入完以后,隐藏键盘,

    在x-code Version 4.3.2 (4E2002)下编译: 在 Controller. m 文件下添加如下实例方法即可: - (void)viewDidUnload { [super vie ...

  8. Spring 基于注解的装配

    xml头文件 xmlns:context="http://www.springframework.org/schema/context" 扫描包:<context:compo ...

  9. form表单数据进行json转换

    $.fn.serializeJson = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() { ...

  10. TP框架中如何使用SESSION限制登录?

    TP框架中如何使用SESSION限制登录? 之前总是被问题今天才明白,最高效的来做页面访问限制问题. OOP思想中的继承特性,实现验证,是否已经登录,不必每个页面都进行判断. 实现如下: 继承Cont ...