2015-01-29 17 views

risposta

12

È necessaria la matrice di collegamento Z, che è l'input per la funzione di dendrogramma scipy e la converte in formato Newick. Inoltre, hai bisogno di un elenco "nome_foglia" con i nomi delle tue foglie. Ecco una funzione che svolgerà il lavoro:

from scipy.cluster import hierarchy 
def getNewick(node, newick, parentdist, leaf_names): 
    if node.is_leaf(): 
     return "%s:%.2f%s" % (leaf_names[node.id], parentdist - node.dist, newick) 
    else: 
     if len(newick) > 0: 
      newick = "):%.2f%s" % (parentdist - node.dist, newick) 
     else: 
      newick = ");" 
     newick = getNewick(node.get_left(), newick, node.dist, leaf_names) 
     newick = getNewick(node.get_right(), ",%s" % (newick), node.dist, leaf_names) 
     newick = "(%s" % (newick) 
     return newick 

tree = hierarchy.to_tree(Z,False) 
getNewick(tree, "", tree.dist, leaf_names)