最近在学习 Bioinformatics with python cookbook 这本书第六章 Phylogenetics 的内容,了解到python中与系统发育相关的两个模块 Dendropy和 ete3 (A Python framework for the analysis and visualization of trees),浏览ete3的文档的时候发现了很多非常漂亮的图片,第一感觉是和R语言里的ggtree功能很相似,所以觉得还是有必要学习一下。以下内容记录自己重复ete3文档中漂亮图片的过程。(题外话:个人感觉python绘图系统的默认配色比R语言的配色漂亮一点)

第一步 安装

自己 windows 的电脑按住了Anaconda3,直接在DOS命令行下使用easy_install即可安装相应的python模块.(正常应该使用pip install安装也是可以的,但是自己尝试的时候遇到了报错,没有搞清楚是什么原因)

easy_install ete3

第一个简单的小例子

读入树文件,查看,然后保存为pdf文件

from ete3 import Tree

t = Tree("../../Desktop/Malus.output.fasta.treefile")

t.show()

运行完 t.show() 会跳出来一个ETE Tree Browser

25.PNG

有点像figtree

未完待续......

更新

将读入的树文件写入到新文件中

from ete3 import Tree

t = Tree("(A:1,(B:1,(E:1,D:1)Internal_1:0.5)Internal_2:0.5)Root;")

t.write() #输出到屏幕

t.write(outfile="new_tree.nex") #写入到文件中

文档的内容有些枯燥,还是先从重复美图开始吧

t.show()函数运行后会跳出来ETE Tree Browser窗口,将树显示到桌面上

t.render()函数可以将树输出到图片里,可以生成png,pdf,svg格式

一个简单的小例子

from ete3 import Tree, TreeStyle

t = Tree()

t.render("mytree.png",w=183,units="mm")

mytree.png

第二个简单的小例子

from ete3 import Tree

from ete3 import TreeStyle

t = Tree()

t.populate(10)

ts.show_leaf_name = True

ts.mode = "c"

ts.arc_start = -180

ts.arc_span = 180

t.show(tree_style=ts)

t.render("tree.png",tree_style=ts)

tree.png

3、第三个简单的小例子

from ete3 import Tree

t = Tree("((((a1,a2),a3), ((b1,b2),(b3,b4))), ((c1,c2),c3));")

t.render("46.png")

46.png

from ete3 import Tree

from ete3 import NodeStyle

t = Tree("((((a1,a2),a3), ((b1,b2),(b3,b4))), ((c1,c2),c3));")

n1 = t.get_common_ancestor("a1","a2","a3")

nst1 = NodeStyle()

nst1["bgcolor"] = "LightSteelBlue"

n1.set_style(nst1)

t.render("47.png")

47.png

from ete3 import Tree

from ete3 import NodeStyle

from ete3 import AttrFace

from ete3 import faces

from ete3 import TreeStyle

t = Tree("((((a1,a2),a3), ((b1,b2),(b3,b4))), ((c1,c2),c3));")

n1 = t.get_common_ancestor("a1","a2","a3")

nst1 = NodeStyle()

nst1["bgcolor"] = "LightSteelBlue"

n1.set_style(nst1)

n2 = t.get_common_ancestor("b1","b2","b3","b4")

nst2 = NodeStyle()

nst2["bgcolor"] = "DarkSeaGreen"

n2.set_style(nst2)

def lauout(node):

if node.is_leaf():

N = AttrFace("name",fsize=30)

faces.add_face_to_node(N,node,0,position="aligned")

ts = TreeStyle()

ts.layout_fn = layout

ts.show_leaf_name = False

ts.render(tree_style = ts,file_name = "48.png")

48.png

rom ete3 import Tree

from ete3 import NodeStyle

from ete3 import AttrFace

from ete3 import faces

from ete3 import TreeStyle

t = Tree("((((a1,a2),a3), ((b1,b2),(b3,b4))), ((c1,c2),c3));")

for n in t.traverse():

n.dist = 2

n1 = t.get_common_ancestor("a1","a2","a3")

nst1 = NodeStyle()

nst1["bgcolor"] = "LightSteelBlue"

n1.set_style(nst1)

n2 = t.get_common_ancestor("b1","b2","b3","b4")

nst2 = NodeStyle()

nst2["bgcolor"] = "Moccasin"

n2.set_style(nst2)

n2 = t.get_common_ancestor("c1","c2","c3")

nst3 = NodeStyle()

nst3["bgcolor"] = "DarkSeaGreen"

n2.set_style(nst3)

ts = TreeStyle()

ts.mode = "c"

t.render(tree_style=ts,file_name="49.png",w=1000,h=1000,dpi=300)

49.png

第4个小例子

from ete3 import Tree

from ete3 import TreeStyle

from ete3 import faces

from ete3 import AttrFace

from ete3 import PieChartFace

from ete3 import COLOR_SCHEMES

from random import sample

from random import randint

t = Tree("((((a1,a2),a3), ((b1,b2),(b3,b4))), ((c1,c2),c3));")

ts = TreeStyle()

def layout(node):

if node.is_leaf():

N = AttrFace("name",fsize=20)

faces.add_face_to_node(N,node,column=0,position="branch-right")

pieF = PieChartFace([10,20,60,10],colors=COLOR_SCHEMES[sample(schema_names,1)[0]],width=40,height=40)

faces.add_face_to_node(pieF,node,column=0,position="aligned")

else:

node.img_style["size"] = randint(3,6)

node.img_style["shape"] = "square"

node.img_style["fgcolor" ] = "green"

ts.layout_fn = layout

ts.show_leaf_name = False

ts.show_scale = False

t.render(tree_style=ts,file_name = "50.png",w=500,h=500)

50.png

第五个小例子

from ete3 import Tree

from ete3 import TreeStyle

from ete3 import faces

from ete3 import TextFace

from ete3 import AttrFace

from ete3 import CircleFace

from random import randint

t = Tree("((((a1,a2),a3), ((b1,b2),(b3,b4))), ((c1,c2),c3));")

def layout(node):

if node.is_leaf():

N = AttrFace("name",fsize=20)

faces.add_face_to_node(N,node,column=0,position="branch-right")

node.img_style["size"] = 0

else:

node.img_style['size'] = randint(5,8)

node.img_style["shape"] = "square"

node.img_style["fgcolor"] = "green"

bubble_face = CircleFace(randint(5,10),'steelblue','sphere')

bubble_face.opacity = 0.6

faces.add_face_to_node(bubble_face,node,column=0,position="float-behind")

faces.add_face_to_node(AttrFace("dist",fsize=7,fgcolor="red"),node,column=0,position="branch-top")

if node.up and not node.up.up:

node.img_style['vt_line_width'] = 3

node.img_style['hz_line_width'] = 4

ts = TreeStyle()

ts.lsyout _fn = layout

ts.show_leaf_name = False

ts.show_scale = False

ts.mode = 'c'

ts.arc_start = 270

ts.arc_span = 185

t.show(tree_style=ts)

t.render(tree_style=ts,w=800,file_name="51.png")

51.png

更新 Dendropy 模块的内容

比对格式之间的转化,比较常用的比如从fasta格式转换成newick格式,或者newick转换成nexus格式,自己之前遇到此类问题一直使用的是在线工具 http://sing.ei.uvigo.es/ALTER/ 。今天浏览dendropy文档时发现这个模块也可以实现格式转换,多了一种选择,简单记录。(具体都可以转换那些格式自己还不是很清楚,自己目前知道的是fasta,newick,nexus,phylip)使用到的示例文件

https://pan.baidu.com/s/1chchsxMjP2fM-ghKaOaArQ

import dendropy

ccsA = dendropy.DnaCharacterMatrix.get(path = "ccsA_KaKs_pra.fas", schema = "fasta")

ccsA.write(path = "ccsA.phy",schema = "phylip")

ccsA.write(path = "ccsA.newick", schema = "newick")

ccsA.write(path = "ccsA.nexus", schema = "nexus")

使用mega利用上一步的比对文件建一棵树,导出为newick格式,然后利用dendropy模块转化为nexus格式(converting a single tree from Newick schema to nexus)

import dendropy

ccsA = dendropy.Tree.get(path = "ccsA.newick",schema = "newick")

ccsA.write(path="ccsA.nex",schema = "nexus")

查看树(viewing and displaying trees)

两种方式

print_plot()可以查看拓扑结构

as_string()可以查看文本形式的树

import dendropy

t = dendropy.Tree.get(path = "ccsA.newick",schema = "newick")

t.print_plot()

print(t.as_string(schema="newick"))

print(t.as_string(schema="nexus"))

自genbank数据库下载fasta格式的数据(这部分是重复Bioinformatics with python cookbook 这本书第六章 Phylogenetics 的内容第一步:下载诶博拉病毒的基因组数据,之前尝试了好多次一直没有看懂书中的代码,尝试原封不动的重复一直遇到错误,今天浏览dendropy的文档的过程中找到了一直遇到报错的原因:dendropy的部分代码已经更新,书中提到的部分代码已经不再使用)

先重复文档中的两个小例子

import dendropy

from dendropy.interop import genbank

gb_dna = genbank.GenBankDna(ids = ['EU105474','EU105475'])

#如果序列号之间是连续的,还可以换一种写法

gb_dna = genbank.GenBankDna(id_range=(74,75),prefix="EU1054")

for gb in gb_dna:

print(gb)

char_mat = gb_dna.generate_char_matrix()

#输出到屏幕

print(char_mat.as_string("fasta"))

#写到文件里

fw = open("dendropy_practice_1.fasta","w")

char_mat.write_to_stream(fw,'fasta')

fw.close()

import dendropy

from dendropy.interop import genbank

def get_other_ebolavirus_sources():

yield 'BDBV', genbank.GenBankDna(id_range=(3,6),prefix='KC54539')

yield 'BDBV', genbank.GenBankDna(ids=['FJ217161'])

yield 'RESTV', genbank.GenBankDna(ids=['AB050936','JX477165','JX477166','FJ621583','FJ621584','FJ621585'])

yield 'SUDV', genbank.GenBankDna(ids=['KC242783','AY729654','EU338380','JN638998','FJ968794','KC589025','JN638998'])

yield 'SUDV', genbank.GenBankDna(id_range=(89,92),prefix='KC5453')

yield 'TAFV', genbank.GenBankDna(ids=['FJ217162'])

#原书中需要更新的代码

#这部分代码自己也不是太明白,反正目的是将序列的名字改成自己想要的格式

def gb_to_taxon(gb,taxon_namespace):

label = species + "_" + gb.accession

taxon = taxon_namespace.require_taxon(label=label)

return taxon

taxon_namespace = dendropy.TaxonNamespace()

other = open('other.fasta','w')

for species, recs in get_other_ebolavirus_sources():

char_mat = recs.generate_char_matrix(taxon_namespace = taxon_namespace,gb_to_taxon_fn = gb_to_taxon)

print(char_mat.as_string("fasta"))

char_mat.write_to_stream(other,'fasta')

other.close()

下载所有序列用到的完整代码(小插曲:第一次试运行遇到了报错,仔细检查才发现把序列号中的数字0错看成了字母O)

import dendropy

from dendropy.interop import genbank

def get_other_ebolavirus_sources():

yield 'BDBV', genbank.GenBankDna(id_range=(3,6),prefix='KC54539')

yield 'BDBV', genbank.GenBankDna(ids=['FJ217161'])

yield 'RESTV', genbank.GenBankDna(ids=['AB050936','JX477165','JX477166','FJ621583','FJ621584','FJ621585'])

yield 'SUDV', genbank.GenBankDna(ids=['KC242783','AY729654','EU338380','JN638998','FJ968794','KC589025','JN638998'])

yield 'SUDV', genbank.GenBankDna(id_range=(89,92),prefix='KC5453')

yield 'TAFV', genbank.GenBankDna(ids=['FJ217162'])

def get_ebov_2014_sources():

yield 'EBOV_2014', genbank.GenBankDna(id_range=(233036,233118),prefix="KM")

yield 'EBOV_2014', genbank.GenBankDna(id_range=(34549,34563),prefix='KM0')

def get_other_ebov_sources():

yield 'EBOV_1976', genbank.GenBankDna(ids=['AF272001','KC242801'])

yield 'EBOV_1995', genbank.GenBankDna(ids=['KC242796','KC242799'])

yield 'EBOV_2007', genbank.GenBankDna(id_range=(84,90),prefix='KC2427')

#原书中需要更新的代码

#这部分代码自己也不是太明白,反正目的是将序列的名字改成自己想要的格式

def gb_to_taxon(gb,taxon_namespace):

label = species + "_" + gb.accession

taxon = taxon_namespace.require_taxon(label=label)

return taxon

taxon_namespace = dendropy.TaxonNamespace()

sampled = open('sample.fasta','w')

for species, recs in get_other_ebolavirus_sources():

char_mat = recs.generate_char_matrix(taxon_namespace = taxon_namespace,gb_to_taxon_fn = gb_to_taxon)

char_mat.write_to_stream(sampled,'fasta')

def gb_to_taxon1(gb,taxon_namespace):

label = "EBOV_2014_" + gb.accession

taxon = taxon_namespace.require_taxon(label=label)

return taxon

for species, recs in get_ebov_2014_sources():

char_mat = recs.generate_char_matrix(taxon_namespace = taxon_namespace,gb_to_taxon_fn = gb_to_taxon1)

char_mat.write_to_stream(sampled,'fasta')

for species, rec in get_other_ebov_sources():

char_mat = recs.generate_char_matrix(taxon_namespace = taxon_namespace,gb_to_taxon_fn = gb_to_taxon1)

char_mat.write_to_stream(sampled,'fasta')

sampled.close()

接下来可以重复比对和建树了

python中的系统模块_python中与系统发育相关的模块相关推荐

  1. python中的正则表达式re模块_python中的正则表达式(re模块)

    一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎 ...

  2. python中自带的模块_python中的模块详解

    概念 python中的模块是什么?简而言之,在python中,一个文件(以".py"为后缀名的文件)就叫做一个模块,每一个模块在python里都被看做是一个独立的文件.模块可以被项 ...

  3. python中大括号是什么_Python中模块(Module)和包(Package)到底是什么,有什么区别?...

    1. 模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个 ...

  4. python找不到os模块_Python中的OS模块:您需要知道的一切

    Python是当今业界最强大的编程语言之一.由于Python具有许多特性和强大的通用性,许多复杂的编程目标可以很容易地在Python中实现.在本文中,我们将按照以下顺序讨论Pyt Python是当今业 ...

  5. python中常用的序列化模块_Python中的序列化和反序列化

    为什么要序列化 内存中的字典.列表.集合以及各种对象,如何保存到一个文件中. 设计一套协议,按照某种规则,把内存中的数据保存到文件中,文件是一个个字节序列.所以必须把数据额转换为字节序列,输出到文件, ...

  6. python中os模块_Python的武器库11:os模块

    说到编程语言python,有一个著名的格言"余生太短,只用python".如果要分析为什么会存在这么一句格言?python的语法并不简单,有复杂难懂的部分,之所以有这样一句格言,是 ...

  7. python从包中导入模块_Python中包,模块导入的方法

    Python中包,模块导入的方法 http://www.cnblogs.com/allenblogs/archive/2011/05/24/2055149.html 1. import modname ...

  8. 如何下载python模块_python中模块包的离线下载教程

    1.简介 当我们进行Python项目的迁移时(例如迁移到另外一台服务器上),如果该服务器要求离线安装, 往往需要我们将项目中的所需模块包进行离线操作. 2.教程 2.1 首先安装pip2pi模块,它可 ...

  9. python中parse是什么_Python中optparse模块使用浅析

    最近遇到一个问题,是指定参数来运行某个特定的进程,这很类似Linux中一些命令的参数了,比如ls -a,为什么加上-a选项会响应.optparse模块实现的也是类似的功能,它是为脚本传递命令参数. 使 ...

  10. python主函数的作用_python中main函数的用法

    原博文 2020-03-27 20:25 − **什么场景下会有main函数?** 当该python脚本被作为模块(module)引入(import)时,其中的main()函数将不会被执行. **ma ...

最新文章

  1. 中科微研课题上犹授牌-农业大健康·李喜贵:谋定功能性农业
  2. linux下tomcat服务器的启动和关闭以及查看实时打印日志
  3. [python+nltk] 自然语言处理简单介绍和NLTK坏境配置及入门知识(一)
  4. 【C++ Primer | 09】容器适配器
  5. 【kibana】kibana 7.* 设置中文 汉化
  6. TCP/IP参考模型、五层参考模型
  7. 神奇的仙丹,性感的Elixir
  8. C#用域账号登陆,访问网络路径
  9. 第一个vue-cli程序
  10. 2017cad光标大小怎么调_怎么设置CAD中十字光标的长度
  11. 08#wordcloud2包 词云生成器
  12. Every Document Owns Its Structure: Inductive Text Classification via GNN (TextING)
  13. 串级PID和 前馈系统
  14. 【读书笔记->统计学】04-01 利用概率理论预测和决策-概率与事件、维恩图、互斥与相交事件、交集与并集概念简介
  15. Sybase 时间处理Convert 的使用
  16. 2022-2028年中国知识产权行业竞争策略研究及未来前景展望报告
  17. android中 textview.setVisibility(View.VISIBLE)失效问题
  18. 苗家牛憋(屎)汤独步天下
  19. 错误: 找不到或无法加载主类 com.xxxx.xxx.Application
  20. 2018-决策树约束的建筑点云提取方法

热门文章

  1. linux 系统安装微信小程序开发工具
  2. android电容触摸驱动
  3. java基础语法(三)--运算符、控制语句
  4. PS制作一寸带白框的证件照
  5. 将SVG 转换为png -- ImageMagick 转换 svg 为透明png 图
  6. 单片机c语言中的精确延时程序,单片机精确毫秒延时函数
  7. IDEA下载安装,以及汉化
  8. 使用PE破解Windows电脑密码
  9. GIS与CAD在村庄规划中的图框位置一致处理
  10. 经典商业融资计划书PPT模板