題:
用biopython截斷系統發育樹的分支長度值
Sidra Younas
2018-12-17 13:16:35 UTC
view on stackexchange narkive permalink

我一直在使用biopython 1.72來顯示我的系統進化樹文件。

  1. 使用函數'Phylo.draw(pars_tree,branch_labels = lambda c:c.branch_length )'同時在樹上顯示分支長度,樹將分支長度顯示為包括小數點後的所有數字。雖然我希望將數字截斷到兩位小數位。以下是一種python方法,它最多可以截斷“所需的數字” 個小數位。 0):乘數= 10 **小數點返回int(n *乘數)/ multipliertruncate(12.567,2)#使用函數12.56#輸出我可以將biopython這樣的方法用於分支長度嗎?

  2. 'Phylo.draw'函數將打開一個非常狹窄的窗口,如果樹文件較大,則所有分支都將重疊,並且很難讀取所寫內容。有誰知道更好的顯示方法嗎?

  3. ol>

    下面是示例代碼,我一直在使用:

      from Bio import Phylofrom Bio。 Phylo.TreeConstruction導入*從Bio導入AlignIOaln = AlignIO.read(open('example.phy'),'phylip')calculator = DistanceCalculator()dm = Calculator.get_distance(aln)構造函數= DistanceTreeConstructor()njtree =構造函數.nj (dm)starting_tree = njtreescorer = ParsimonyScorer()searcher = NNITreeSearcher(scorer)constructor = ParsimonyTreeConstructor(searcher,starting_tree)pars_tree = Constructor.build_tree(aln)Phylo.draw(pars_tree,branch_labels = lambda c:c.branch_length > 

    我有一個msa文件作為輸入,它給出了一棵樹,看起來像:

      _______ Human _______ | | | _______黑猩猩________ | | | _______狗
    _______ | | _______ | | | | _______牛_______ || | | | | _______________________大象_______ | | | | | _______________________________鼠標| | _______ | | _______________________________________鴨嘴獸| | | | _______________________________________ Anole_lizard | | _______ | ______ | | _______________________________雞肉| | | _______ | | | | _______________________________ Zebra_finch | | | | _______________________________________________________非洲爪蟾_ | | _______________________________________________________斑馬魚| ______ | | | _______________________________________________________府谷| | ______________________________________________________________ Amphioxus  
如果您不願意使用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')),對於我,blength枚舉(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):在struc.iteritems()中為key,val打印'* indent +'{':如果isinstance(val,(dict, list,tuple)):打印''*(indent + 1)+ str(key)+'= >'printStruct(val,indent + 2)else:打印''*(indent + 1)+ str(key)+ '= >'+ str(val)打印''* indent +'}'elif isinstance(struc, list):為struc中的項目打印''* indent +'[':printStruct(item,indent + 1)print''* indent +']'elif isinstance(struc,tuple):打印''* indent +'( '用於struc中的項目:printStruct(item,indent + 1)打印''* indent +')'else:打印''* indent + str(struc) 

結構,您將其相應地分解為分支長度,然後發出printf命令將其舍入為2 dp。

Goodluck

這仍然沒有幫助我。詳盡的答案可能會有所幫助。
如果可以的話,我將重現分析,但我不是您的主管(實際上是一個非常低的優先級)。 “列表”是與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 可能對您的上下文有用: :printf(blength =%。2f,blength)

好運

它對我沒有用。首先有一個語法錯誤,當我以這種方式使用它時:`allclades = list(pars_tree.find_clades(order ='level'))for enumerate(allclades)中的blength:print(blength =“%8.2f”%blength) `。它說:““ TypeError:不是在格式化字符串時轉換了所有參數”。有什麼建議嗎?


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
Loading...