python版的MCScan绘图

最近发现了python版的MCScan,是个大宝藏。由于走了不少弯路,终于画出美图,赶紧记录下来。github地址 https://github.com/tanghaibao/jcvi/wiki/MCscan-(Python-version)

安装

## 安装lastal
网址:http://last.cbrc.jp
unzip last-1060.zip
cd last-1060
make

# 把scripts, src 添加到环境变量

##  jcvi
pip install jcvi

## 若出现 from rillib.parse import urlparse 缺少parse模块,则装parse模块,然后将urllib.parse 改为urlparse; 因为urlparse模块在Python 3中重命名为urllib.parse,所以模块在Python 2.7下应该使用urlparse。

简单使用

  • 所需基因组的gff文件
  • 所需基因组的pep或者cds序列

输入数据处理

将gff转变为bed格式

## 以spinach,和sugar为例子
python -m jcvi.formats.gff bed --type=mRNA --key=ID spinach_gene_v1.gff3 -o spinach.bed
python -m jcvi.formats.gff bed --type=mRNA --key=ID BeetSet-2.unfiltered_genes.1408.gff3.txt -o sugar.bed

##参数
--type:gff文件中第三列
--key:type对应的第九列信息前缀

我们分析只需要用到每个基因最长的转录本就行,在sugar中是以多个转录本进行存储,因为需要获取最长转录本

## 将sugar中bed进行去重复
python -m jcvi.formats.bed uniq sugar.bed

获取对应cds/pep序列

## cds和pep序列均可以进行共线性分析
## 根据上述得到的.bed文件调取对应cds和蛋白序列
# spinach
seqkit grep -f <(cut -f4 spianch.bed) spinach.cds.fa  | seqkit seq -I >spinach.cds
seqkit grep -f <(cut -f4 spianch.bed) spinach.pep.fa  | seqkit seq -I >spinach.pep

# sugar
seqkit grep -f <(cut -f4 sugar.uniq.bed) BeetSet-2.genes.1408.cds.fa  | seqkit seq -i >sugar.cds
seqkit grep -f <(cut -f4 sugar.uniq.bed) BeetSet-2.genes.1408.pep.fa  | seqkit seq -i >sugar.pep

\color{red}{tips}
也可以根据gff文件,基因组ref.fa文件中直接调取cds,和pep序列

## 需要安装cufflinks

## 提取cds
gffread in.gff3 -g ref.fa -x cds.fa

## 提取pep
gffread in.gff3 -g ref.fa -y pep.fa

共线性分析

## 新建一个文件夹,方便在报错的时候,把全部都给删了
mkdir cds && cd cds
ln -s ../sugar.cd ./
ln -s ../sugar.uniq.bed ./sugar.bed
ln -s ../spinach.cds ./
ln -s ../spinch.bed ./

## 运行代码
python -m jcvi.compara.catalog ortholog (--dbtype prot[蛋白分析]) --no_strip_names spinach sugar

结果:
spinach.sugar.anchors:共线性block区块(高质量)
spinach.sugar.last:原始的last输出
spinach.sugar.last.filtered:过滤后的last输出
spinach.sugar.pdf:点阵图

## 如果遇到报错,多半是要安装python包,更新Latex

可视化

## 首先生成.sinple文件
python -m jcvi.compara.synteny screen --minspan=30 --simple spinach.sugar.anchors spinach.sugar.anchors.new

## 编辑配置文件seqids 和layout

#设置需要展示染色体号
vi seqids
chr1,chr2,chr3,chr4,chr5,chr6 #spinach
Bvchr1.sca001,Bvchr2.sca001,Bvchr3.sca001 #sugar

# 设置颜色,长宽等
vi layout
# y, xstart, xend, rotation, color, label, va, bed
 .6,    .1,    .8,    0,    red,    spinach,    top, spinach.bed
 .4,    .1,    ,8,    0,    blue,    sugar,    top,    sugar.bed
# edges
e, 0, 1, spinach.sugar.anchors.simple

注意, #edges下的每一行开头都不能有空格

## 运行代码
python -m jcvi.graphics.karyotype seqids layout

得到以下图片


若想突出显示某一共线性则可以在对应的位置添加g*即可

vi spinach.sugar.anchors.simple
g*Spo03717      Spo03716        Bv3_048620_odzi.t1      Bv3_049090_cxmm.t1      46      +
Spo17356        Spo17350        Bv1_001140_tedw.t1      Bv1_001540_xzdn.t1      41      -
Spo13685        Spo13730        Bv5_123480_yfcy.t1      Bv5_123900_rucq.t1      46      -
Spo26250        Spo26280        Bv5_117270_qhwj.t1      Bv5_117680_iykf.t1      36      +
Spo19005        Spo06982        Bv7_173830_frmo.t1      Bv7_174150_pckw.t1      37      +
Spo19374        Spo20559        Bv4_081440_riqq.t1      Bv4_081750_yeuy.t1      32      -

#运行
python -m jcvi.graphics.karyotype seqids layout

若想比较3个物种共线性关系,则应两两比对,得到两个.simple文件,并对其进行配置

$ vi layout
# y, xstart, xend, rotation, color, label, va,  bed
.7,     .1,    .8,      15,      , Grape, top, grape.bed
.5,     .1,    .8,       0,      , Peach, top, peach.bed
.3,     .1,    .8,     -15,      , Cacao, bottom, cacao.bed
# edges
e, 0, 1, grape.peach.anchors.simple
e, 1, 2, peach.cacao.anchors.simple

$ vi seqids
chr1,chr2,chr3,chr4,chr5,chr6,chr7,chr8,chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19
scaffold_1,scaffold_2,scaffold_3,scaffold_4,scaffold_5,scaffold_6,scaffold_7,scaffold_8
scaffold_1,scaffold_2,scaffold_3,scaffold_4,scaffold_5,scaffold_6,scaffold_7,scaffold_8,scaffold_9,scaffold_10r

$ python -m jcvi.graphics.karyotype seqids layout

可以得到以下结果


也可以调整配置文件,得到不同样式的图形

# y, xstart, xend, rotation, color, label, va,  bed
 .5,      0.025,    0.625,      60,      , Grape, top, grape.bed
 .2,      0.2,    .8,       0,      , Peach, top, peach.bed
 .5,     0.375,    0.975,     -60,      , Cacao, top, cacao.bed
# edges
e, 0, 1, grape.peach.anchors.simple
e, 1, 2, peach.cacao.anchors.simple

#运行
python -m jcvi.graphics.karyotype seqids layout

得到如下结果


除此之外,可以用TBtools快速得到共线性图片可以参考用TBtools,快速高效实现基因组共线性分析与可视化, 赞!

微共线性分析

在基因水平上进行查看共线性结果

(1)获取共线性区块

$ python -m jcvi.compara.synteny mcscan grape.bed grape.peach.lifted.anchors --iter=1 -o grape.peach.i1.blocks
##
--iter=1 表示获取最佳的区域,若=2,则获取两个区块,可用于基因组复制分析

grape.peach.i1.blocks 包含两列 (iter=1),第一列grape基因名字,第二列;peach基因名,么有对应基因就是一个点

Ggene  Pgene
Ggene  Pgene
Ggene  .
Ggene  . 

本次选择部分进行画图

$ head -50 grape.peach.i1.blocks > blocks

(2)配置画图 blocks.layout

# x,   y, rotation,   ha,     va,   color, ratio,            label
0.5, 0.6,        0, left, center,       m,     1,       grape Chr1
0.5, 0.4,        0, left, center, #fc8d62,     1, peach scaffold_1
# edges
e, 0, 1

(3) 进行画图

cat grape.bed peach.bed > grape_peach.bed
python -m jcvi.graphics.synteny blocks grape_peach.bed blocks.layout
图1

也可以选择直线

$ python -m jcvi.graphics.synteny blocks grape_peach.bed blocks.layout --shadestyle=line
图2

基因也可以只用箭头的方式

$ python -m jcvi.graphics.synteny blocks grape_peach.bed blocks.layout --glyphstyle=arrow
图3

也可以添加颜色

$ python -m jcvi.graphics.synteny blocks grape_peach.bed blocks.layout --glyphcolor=orthogroup
图4

添加基因名称

$ python -m jcvi.graphics.synteny blocks grape_peach.bed blocks.layout --genelabelsize 6
图4

也可以多个进行比对(如上述一样)

首先俩俩进行比对,分别获取block,然后将其合并即可

$ python -m jcvi.compara.catalog ortholog grape cacao --cscore=.99
$ python -m jcvi.compara.synteny mcscan grape.bed grape.cacao.lifted.anchors --iter=1 -o grape.cacao.i1.blocks

## 合并
$ python -m jcvi.formats.base join grape.peach.i1.blocks grape.cacao.i1.blocks --noheader | cut -f1,2,4,6 > grape.blocks
$ head -50 grape.blocks > blocks2

block 文件如下

GSVIVT01012261001   .   .
GSVIVT01012259001   .   .
GSVIVT01012258001   .   .
GSVIVT01012257001   .   .
GSVIVT01012255001   Prupe.1G290900.1    Thecc1EG011472t1
GSVIVT01012253001   Prupe.1G290800.2    Thecc1EG011473t1
GSVIVT01012252001   Prupe.1G290700.1    Thecc1EG011474t1
GSVIVT01012250001   Prupe.1G290600.1    Thecc1EG011475t1
GSVIVT01012249001   Prupe.1G290500.1    Thecc1EG011478t1
GSVIVT01012248001   Prupe.1G290400.1    Thecc1EG011482t1

blocks2.layout如下

# x,   y, rotation,     ha,     va, color, ratio,            label
0.5, 0.6,        0, center,    top,      ,     1,       grape Chr1
0.3, 0.4,        0, center, bottom,      ,    .5, peach scaffold_1
0.7, 0.4,        0, center, bottom,      ,    .5, cacao scaffold_2
# edges
e, 0, 1
e, 0, 2

开始画

$ cat grape.bed peach.bed cacao.bed > grape_peach_cacao.bed
$ python -m jcvi.graphics.synteny blocks2 grape_peach_cacao.bed blocks2.layout
图4

20240701

评估基因组大小
https://github.com/tanghaibao/jcvi/wiki/Genome-build

python -m jcvi.assembly.kmer histogram reads.histo "*S. species* ‘Variety 1’" 21
## 其中reads.histo 为kmer数量,可以用jellfish得到,或者其他工具即可
1 1281576854
2 89292133
3 21588481
4 9347716
5 5569400
6 4705214

参考

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