Biopython PhyloTree to PyVis Network

34 Views Asked by At

we are trying to convert a Phylogenetic tree to networkx previously calculated with

from Bio.Phylo.TreeConstruction import DistanceMatrix
from Bio.Phylo.TreeConstruction import DistanceTreeConstructor
from Bio.Phylo import draw

lower_triangle = []

for i in range(0, len(distance_matrix)):
    lower_triangle.append(list(distance_matrix[i][:i+1]))

lower_triangle    

# Make a list of strings from '0' to '9'
labels = list(map(str, range(0, len(lower_triangle))))

distance_matrix = DistanceMatrix(names=labels, matrix=lower_triangle)

constructor = DistanceTreeConstructor()
upgma_tree = constructor.upgma(distance_matrix)

and convert with

from pyvis.network import Network
from Bio import Phylo

g=Network(height=500, width=500)
g.toggle_physics(True)
network_x_graph = Phylo.to_networkx(upgma_tree)
g.from_nx(network_x_graph)

It fails with

assert isinstance(n_id, str) or isinstance(n_id, int)

here https://github.com/WestHealth/pyvis/blob/ccb7ce745ee4159ce45eac70b9848ab965fc0906/pyvis/network.py#L236

so it seems the nodes are of wrong type? How can I check / adjust it?

print(upgma_tree)

Tree(rooted=True)
    Clade(branch_length=0, name='Inner9')
        Clade(name='2')
        Clade(name='Inner8')
            Clade(name='7')
            Clade(name='Inner7')
                Clade(name='5')
                Clade(name='Inner6')
                    Clade(name='6')
                    Clade(name='Inner5')
                        Clade(name='4')
                        Clade(name='Inner4')
                            Clade(name='Inner1')
                                Clade(name='9')
                                Clade(name='1')
                            Clade(name='Inner3')
                                Clade(name='3')
                                Clade(name='Inner2')
                                    Clade(name='8')
                                    Clade(name='0')
0

There are 0 best solutions below