2013-03-14 106 views
1

我一直在嘗試使用Python中的ete2軟件將系統發育樹中的節點添加不同的圖像,但沒有成功。ETE2:向節點添加圖像

from ete2 import Tree, TreeStyle, NodeStyle, TextFace, faces, add_face_to_node, AttrFace 
ts.show_leaf_name = True 
ts.show_branch_support = True 

nw = """ 
(((Dre:0.008339,Dme:0.300613)1.000000:0.596401, 
(Cfa:0.640858,Hsa:0.753230)1.000000:0.182035)1.000000:0.106234, 
((Dre:0.271621,Cfa:0.046042)1.000000:0.953250, 
(Hsa:0.061813,Mms:0.110769)1.000000:0.204419)1.000000:0.973467); 
""" 
t = Tree(nw) 


img_path = "/home/leonard/Desktop/img_faces/" 

humanFace = faces.ImgFace(img_path+"human.png") 

mouseFace = faces.ImgFace(img_path+"mouse.png") 


def my_layout(node): 

if name.startswith("Dre"): 

    faces.add_face_to_node(humanface, node, column=1) 

t.show(my_layout) 

ts = TreeStyle() 

t.render("img_faces.png", w=600, tree_style = ts) 

這些是我一直收到錯誤消息:

File "abc1.py", line 34, in <module> 
    t.show(my_layout) 
    File "/usr/local/lib/python2.7/dist-packages/ete2-2.1rev544-py2.7.egg/ete2/coretype/tree.py", line 1283, in show 
    drawer.show_tree(self, layout=layout, tree_style=tree_style) 
    File "/usr/local/lib/python2.7/dist-packages/ete2-2.1rev544-py2.7.egg/ete2/treeview/drawer.py", line 84, in show_tree 
    tree_item, n2i, n2f = render(t, img) 
    File "/usr/local/lib/python2.7/dist-packages/ete2-2.1rev544-py2.7.egg/ete2/treeview/qt4_render.py", line 258, in render 
    set_style(n, layout_fn) 
    File "/usr/local/lib/python2.7/dist-packages/ete2-2.1rev544-py2.7.egg/ete2/treeview/qt4_render.py", line 746, in set_style 
    layout_func(n) 
    File "abc1.py", line 29, in my_layout 
    if name.startswith("Dre"): 
NameError: global name 'name' is not defined 

任何幫助,非常感謝!

回答

4

這是傑米·韋爾塔CEPAS在谷歌組的解決方案,我引用:

「在你的腳本一般Python編程錯誤(」名」變量不存在),我猜那是你意思是「node.name.startswith()」,而不是「name.startswith()」「

它工作。

0

根據文檔(ete2),您需要創建一個面,準備讀取節點的名稱屬性。

嘗試以下添加到您的代碼:

#nameFace = faces.TextFace(open("text").readline().strip(), fsize=20, fgcolor="#009000") 
nameFace = faces.AttrFace("name", fsize=20, fgcolor="#009000")