基因组共线性分析-JCVI

由于忙课题的原因,断更了好久,虽然断更的时间内学习到了很多东西,但细想一下还是记录在自己博客里比较好,方便自己查阅也方便其他人学习

JCVI这个软件网上有太多教程,再记录一次是想按照自己平时的使用习惯把整个流程从头到尾捋一遍

安装

能conda就conda,就一个字,省心!

conda create -n jcvi
conda install jcvi

准备文件

分析需要用到 最长的转录本,很多软件分析时其实已经内置了相应的程序,可以使用以下的方法来提取

less your_gff.gff |grep "mRNA"|cut -d ";" -f1|cut -f1,4,5,7,9|awk -vOFS="\t" '{print$1,($2-1),$3,$5,"0",$4}'|sed 's/ID=//g' > your.bed
conda activate jcvi
python -m jcvi.formats.bed uniq your.bed
seqkit grep -f <(cut -f4 your.uniq.bed) your_pep.fa > your_pep.long.fa

利用上面的方法把需要分析的物种的bed文件以及蛋白或cds的fasta文件准备好
姑且称之为A.bed, A.pep, B.bed, B.pep

分析

python -m jcvi.compara.catalog ortholog A B  --dbtype prot --cscore=.99

我用的是蛋白序列文件,所以加个 --dbtype prot,cds序列则不需要

1,先分析整体的共线性(可视化)

1.1
对上面分析的结果进行一个简单过滤

python -m jcvi.compara.synteny screen --minspan=30 --simple A.B.anchors A.B.anchors.new

--minspan: remove blocks with less span than this.跨度小于30个基因的block将会移除

1.2
创建seqid文件,想展示哪些染色体就将其写入到这个文件中

Chr1A,Chr2A,Chr3A,Chr4A,Chr5A
Chr1B,Chr2B,Chr3B,Chr4B,Chr5B

1.3
创建layout文件,用于设置绘图参数,最终出图都是通过调整这个文件来达到自己想要的效果。

# y, xstart, xend, rotation, color, label, va,  bed
 .6,     .2,    .8,       0,      , A, top, A.bed
 .4,     .2,    .8,       0,      , B, top, B.bed
# edges
e, 0, 1, aly.ath.anchors.simple

y为纵轴位置,x为横轴位置,rotation为旋转角度,比如45或者-45啥的,看自己需求,label就是基因组名字了,后面的top表示名字在染色体上方表示,也可以设置leftrightbottom
edges那里就是连线,0是第一个基因组,1是第二个,然后就是3,4...,想让哪两个连线就设置好对应的edgessimple文件

最后运行命令

python -m jcvi.graphics.karyotype seqids layout
2,局部共线性分析(可视化)

获得block文件

python -m jcvi.compara.synteny mcscan A.bed A.B.lifted.anchors --iter=1 -o A.B.i1.blocks

解释一下的话就是,以A基因组作为标准,从B中得到对应的共线性基因,假如B中有的基因而A中没有的话是无法知道的,--iter=1表示基因是一对一,参数调整范围为1-100
如果有更多基因组的话,可以继续按照上面的流程得到blocks

python -m jcvi.compara.synteny mcscan A.bed A.C.lifted.anchors --iter=1 -o A.C.i1.blocks
#然后将这些block合并到一起
paste *.i1.blocks|cut -f1,2,4 > all.i1.blocks
#合并bed文件
cat A.bed B.bed C.bed > all.bed

准备layout文件

# x,   y, rotation,     ha,     va, color, ratio,            label
0.2, 0.3,        0,  center,    bottom,   ,    .8,         1A
0.8, 0.3,        0,  center,    bottom,   ,    .8,         1B
0.47, 0.3,        0,  center,    bottom,   ,    .8,         1C
# edges
e, 0, 1
e, 1, 2
e, 2, 3

三个基因组的话差不多就这样,跟上面的差不多,不做过多解释了,这些数字是我乱写的,画的时候多试试就知道了

最后!画图!

python -m jcvi.graphics.synteny all.i1.blocks all.bed layout

写在最后

以上就是全部内容了,除了没放结果展示,基本上分析下来是没有问题的,当然主要是写给我看的,所以不会像其他博主一样面面俱到

更新一下内容

之前一直用的旧版本的JCVI,今天才发现有更新
如果不想在共线性图上展示染色体编号的话可以加一个--nocircles

python -m jcvi.graphics.karyotype seqids layout.2 --nocircle

如果不想用曲线,可以加--shadestyle=line
最后展示下多基因组的共线性图

测试下

再次更新

展示整个基因组内感兴趣基因的共线性
近期想要在两个小麦基因组间看一下感兴趣基因的共线性,并需要把相应的基因标识出来,有需求就有更新,这个操作跟全基因组展示基因家族的共线性是一个道理,做基因家族的朋友也可以参考一下。要画这个图其实很简单,跟 1.3 的流程是一样的,关键是获得xxx.simple文件,然后才能开始下面的绘图,现在需要获得两个基因组感兴趣基因的1对1文件,那就需要走一遍 2,局部共线性分析(可视化) 这个流程,得到i1.blocks后,根据感兴趣基因的列表来匹配1对1blocks中的基因,很简单,写个程序就可以:

import sys
gene_list = open(sys.argv[1],'r')
blocks = open(sys.argv[2],'r')
list = []
for i in gene_list:
    i = i.strip()
    list.append(i)
for line in blocks:
    line = line.strip()
    item1 = line.split("\t")[0]
    item2 = line.split("\t")[1]
    if item1 in list and item2 != ".":
        print(item1+"\t"+item2)
    else:
        continue

python get_interestedGene_from_i1_blocks.py gene_list all.i1.blocks > interestedGene.i1.blocks

然后根据这个新blcoks弄成一个simple文件,可以使用以下代码:

cat interestedGene.i1.blocks|awk -vOFS="\t" '{print"#FF0000*"$1,$1,$2,$2,"10","+"}' > interestedGene.simple

如果想在circos上展示共线性,那就需要弄一个link文件,需要基因的bed文件,以及上面的interestedGene.i1.blocks,这里也把代码贴上:

from sys import argv
bed = argv[1]
syn = argv[2]
ref_dict = {line.split("\t")[3]:line.split("\t")[0:3] for line in open(bed)}
for line in open(syn):
    items = line.strip().split("\t")
    s_gene = items[0]
    e_gene = items[1]
    s_chr,s_gene_s,s_gene_e = ref_dict[s_gene][0:3]
    e_chr,e_gene_s,e_gene_e = ref_dict[e_gene][0:3]
    circos_input = [s_chr,s_gene_s,s_gene_e,e_chr,e_gene_s,e_gene_e]
    out = '\t'.join(circos_input)
    print(out)

python get_link_from_i1.blocks.py all.gene.bed interestedGene.i1.blocks > interestedGene.links

微观共线性分析就简单了,直接在i1.blocks文件前面加上颜色就可以了,想看哪一段blocks,就去bed文件里找基因位置,然后把这一段的截出来就行了

更新这一段内容是因为前段时间看了发表在MP上的Genetribe软件文章,这篇文章使用优化的算法鉴定不同基因组之前的共线性基因,并将这些基因分为1对1最佳(RBH)基因,单向最佳匹配基因(SBH),以及1对多基因等,最近在用这个软件分析自己的课题,最后的可视化用jcvi的程序就可以做到,感兴趣的可以看看https://doi.org/10.1016/j.molp.2020.09.019

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容