Closed yukiregista closed 6 months ago
ete3.PhyloTree()
, ete3.Tree()
ともに入力として受け取る際にnewickもしくはnewick形式のファイルが必要.
但し, dendropyのTree.as_string(shema='newick')
でこれを与える場合, 先頭の '[&U]'
でエラーを吐く(エラーコード参照).
(これはete3のPhyloTree, Tree がともに根なし木を考慮していないから)
一回 [&U]
を削除してあげるとうまくいくが, 描画の際にはunrootにする処理をする(多分描画module TreeStyleでこれはできそう)
---------------------------------------------------------------------------
NewickError Traceback (most recent call last)
Cell In[21], line 1
----> 1 t = ete3.PhyloTree(string)
File ~/work/ConsensusProj/ConsensusProj/lib/python3.12/site-packages/ete3/phylo/phylotree.py:391, in PhyloNode.__init__(self, newick, alignment, alg_format, sp_naming_function, format, **kargs)
388 self._speciesFunction = None
389 # Caution! native __init__ has to be called after setting
390 # _speciesFunction to None!!
--> 391 TreeNode.__init__(self, newick=newick, format=format, **kargs)
393 # This will be only executed after reading the whole tree,
394 # because the argument 'alignment' is not passed to the
395 # PhyloNode constructor during parsing
396 if alignment:
File ~/work/ConsensusProj/ConsensusProj/lib/python3.12/site-packages/ete3/coretype/tree.py:212, in TreeNode.__init__(self, newick, format, dist, support, name, quoted_node_names)
210 if newick is not None:
211 self._dist = 0.0
--> 212 read_newick(newick, root_node = self, format=format,
213 quoted_names=quoted_node_names)
File ~/work/ConsensusProj/ConsensusProj/lib/python3.12/site-packages/ete3/parser/newick.py:262, in read_newick(newick, root_node, format, quoted_names)
259 nw = nw.strip()
260 if not nw.startswith('(') and nw.endswith(';'):
261 #return _read_node_data(nw[:-1], root_node, "single", matcher, format)
--> 262 return _read_newick_from_string(nw, root_node, matcher, format, quoted_names)
263 elif not nw.startswith('(') or not nw.endswith(';'):
264 raise NewickError('Unexisting tree file or Malformed newick tree structure.')
File ~/work/ConsensusProj/ConsensusProj/lib/python3.12/site-packages/ete3/parser/newick.py:290, in _read_newick_from_string(nw, root_node, matcher, formatcode, quoted_names)
287 nw = unquoted_nw
289 if not nw.startswith('(') and nw.endswith(';'):
--> 290 _read_node_data(nw[:-1], root_node, "single", matcher, format)
291 if quoted_names:
292 if root_node.name.startswith(_QUOTED_TEXT_PREFIX):
File ~/work/ConsensusProj/ConsensusProj/lib/python3.12/site-packages/ete3/parser/newick.py:445, in _read_node_data(subnw, current_node, node_type, matcher, formatcode)
443 _parse_extra_features(node, data[2])
444 else:
--> 445 raise NewickError("Unexpected newick format '%s' " %subnw[0:50])
446 return
NewickError: Unexpected newick format '[&U] (S1,S2,(S3,((S7,S8,((S11,S12),(S9,S10)),(S4,S'
You may want to check other newick loading flags like 'format' or 'quoted_node_names'.
Selection deleted
メモ: ETE3で描画する際に
pip install PyQt5
をした
@atsuhmd 気付くのが遅れちゃいました&自分の例が悪かったんですが,as_string でnewickで書き下すときに suppress_rooting=True をつけてやる (e.g. t.as_string("newick", suppress_rooting=True)) と,最初の[&U]がなくなります!
これ, [U&] を消す処理にしておいて後でunrootedを付加する処理にしておいた方がいいかなって思っていました(関数にunrootedであることを渡すために)
その場合newickじゃないファイルで書き出してもらうのがいいかもしれません(nexusとか)
これ相当致命的なんですけど, ETE3はnewickしか受け取れないっぽいです
ETE3を使うのは悪手のようなので, #20 でもあるような別のファイル読み込みができるもの(ggtreeとかかもしれない)をひとまず調べてみます.
それならETE3で[&U]なしで個人的には良いと思います!(rootedへのサポートはひとまずそれほど重要でないので)
ひとまず進捗分pushしました.
描画はETE3に任せて, supportをbranch(正確には, ete3.Treeクラスのbranchにはsupportを1つしか割り当てられなかったためbranchの子側ノード)にsupportを複数個付け加えられるような関数 _visualize.get_support を作成しています.
example_notebook内のtest_drawで描けるようにしているので, こちらご参照ください.
今はBioPythonを使って書いているが,もう少しいいパッケージ等あるかも? また,図のサイズがちゃんと決まっていない(大きいツリーだと潰れる).