質問:
系統樹の枝の長さの値をbiopythonで切り捨てる
Sidra Younas
2018-12-17 13:16:35 UTC
view on stackexchange narkive permalink

系統樹ファイルを表示するためにbiopython1.72を使用しています。

  1. 関数 'Phylo.draw(pars_tree、branch_labels = lambda c:c.branch_length ) 'ツリーに枝の長さも表示するには、ツリーは枝の長さを10進数以降のすべての数値を含むものとして表示します。数値を小数点以下2桁に切り捨てたいのですが、以下は、 "必要な数値" の小数点以下の桁数まで切り捨てるPythonメソッドです。

    def truncate(n、decimals = 0):乗数= 10 **小数はint(n *乗数)/乗数切り捨て(12.567、2)を返します#function12.56を使用します#Outputブランチの長さに対してbiopythonでそのようなメソッドを使用できますか?

  2. 'Phylo.draw' 関数は、非常に狭いウィンドウを開きます。ツリーファイルが大きいと、すべてのブランチがオーバーラップし、書き込まれた内容が読みにくくなります。誰かがより良い表示方法を知っていますか?

  3. ol>

    以下はサンプルコードです、私は使用しています:

      from Bio import PhylofromBio。 Phylo.TreeConstruction import * from Bio import AlignIOaln = AlignIO.read(open( 'example.phy')、 'phylip')calculator = DistanceCalculator()dm = calculator.get_distance(aln)constructor = DistanceTreeConstructor()njtree =コンストラクター.nj (dm)starting_tree = njtreescorer = ParsimonyScorer()searcher = NNITreeSearcher(scorer)constructor = ParsimonyTreeConstructor(searcher、starting_tree)pars_tree =コンストラクター.build_tree(aln)Phylo.draw(pars_tree、branch_labels = lambda c:c.branch_length) 

    入力としてmsaファイルがあり、次のようなツリーが表示されます。

      _______ Human _______ | | | _______チンパンジー_______ | | | _______ 犬
    _______ | | _______ | | | | _______牛_______ | | | | | _______________________象_______ | | | | | _______________________________マウス| | _______ | | _______________________________________カモノハシ| | | | _______________________________________ Anole_lizard | | _______ | ______ | | _______________________________チキン| | | _______ | | | | _______________________________ Zebra_finch | | | | _______________________________________________________アフリカツメガエル_ | | _______________________________________________________ゼブラフィッシュ| ______ | | | _______________________________________________________フグ| | ______________________________________________________________ナメクジウオ 
Pythonを使用してツリーを視覚化することに慣れていない場合は、[FigTree](http://tree.bio.ed.ac.uk/software/figtree/)が優れた代替手段を提供します。
まあ、これが私を妨げるものです。私はPythonを使用しています。
入力ツリーの例を教えてください。プロット中に実行しようとするのではなく、ツリーファイル自体を解析し、値を切り捨て、新しいツリーを作成してから、それをプロットすることで、これにアプローチします。 BioPythonのツリー処理はIMOに適しているわけではないため、このような場合はおそらくETE3またはDendropyを使用します。これらのツールには、ノード/ブランチ値を切り捨てるためのオプションが含まれている場合があります。
このために質問を編集しました。
二 答え:
Michael
2018-12-24 21:26:32 UTC
view on stackexchange narkive permalink

お詫びします。次のことを試してください。

  allclades = list(pars_tree.find_clades(order = 'level'))for i、blength in enumerate(allclades):printf(blength =%。 2f、blength) 

"allclades"は単純な配列ではなく辞書です。

これが失敗した場合は、 pprintを使用してallcladesデータ構造を調べます。 (直接)または次のコードを介して printStruct を使用する

  >>> d = [{'a1':1、 'a2':2、 ' a3 ':3}、[1,2,3]、[{' b1 ':1、' b2 ':2}、{' c1 ':1}]、' d1 '、' d2 '、' d3 '] >>> printStruct(d)def printStruct(struc、indent = 0):if isinstance(struc、dict):print '' * indent + '{' for key、val in struc.iteritems():if isinstance(val、(dict、 list、tuple)):print '' *(indent + 1)+ str(key)+ '= >' printStruct(val、indent + 2)else:print '' *(indent + 1)+ str(key)+ '= >' + str(val)print '' * indent + '}' elif isinstance(struc、 list):print '' * indent + '[' for item in struc:printStruct(item、indent + 1)print '' * indent + ']' elif isinstance(struc、tuple):print '' * indent + '( 'struc内のアイテムの場合:printStruct(item、indent + 1)print' '* indent +') 'else:print' '* indent + str(struc) 

それに応じて構造を解き、ブランチの長さを取得してから、printfコマンドを発行して2dpに丸めます。

グッドラック

これはまだ私を助けていません。精巧な答えが役立つかもしれません。
少し時間があれば分析を再現しますが、私はあなたの監督者ではありません(実際、優先度は非常に低いです)。 「リスト」は、printfと組み合わせた答えの鍵です。ここで重要なのは、オブジェクトを「リスト」からロック解除してブランチの長さに到達することです。
Michael
2018-12-23 18:08:00 UTC
view on stackexchange narkive permalink

これを行うための普遍的なコーディング方法は、言語に関係なく printf コマンドです(sprintfは言語に応じて使用されます)。Pythonの場合、これは

  blength = 0.22342 printf( "Taxa A、blength =%。2f"、blength) 

出力

Taxa A、0.22


以下はコンテキストに役立つ場合があります。

  import numpyallclades = list(pars_tree.find_clades(order = 'level'))for blength in enumerate(allclades) :printf(blength =%。2f、blength) 

グッドラック

それは私にはうまくいきませんでした。最初に構文エラーが発生し、次のように使用すると: `allclades = list(pars_tree.find_clades(order = 'level'))for blength in enumerate(allclades):print(blength ="%8.2f "%blength) `。 「TypeError:文字列のフォーマット中にすべての引数が変換されるわけではありません」と書かれています。何か提案はありますか?


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 4.0ライセンスに感謝します。
Loading...