In [1]:
from copy import deepcopy
import matplotlib.pyplot as plt
from Bio import Phylo
#import dendropy

%matplotlib inline

In [2]:
ebola_tree = Phylo.read('my_ebola.nex', 'nexus')
ebola_tree.name = 'Ebolavirus tree'
ebola_simple_tree = Phylo.read('ebola_simple.nex', 'nexus')
ebola_simple_tree.name = 'Ebolavirus simplified tree'

In [3]:
Phylo.draw_ascii(ebola_simple_tree)
Phylo.draw_ascii(ebola_tree)


 , BDBV
 |
 | BDBV
_|
 , BDBV
 |
 , BDBV
 |
 , BDBV
 |
 |               ______________ TAFV
 |              |
 |______________|                       ____________________________ SUDV
                |            __________|
                |           |          |_________________________ RESTV
                |___________|
                            |                  , EBOV2014
                            |__________________|
                                               , EBOV2007
                                               |
                                               , EBOV1976
                                               |
                                               | EBOV1995

 , 'BDBV_KC545395 18891 bp'
 |
 |                                          , 'SUDV_EU338380 18891 bp'
 |                                          |
 |                                          , 'SUDV_KC242783 18891 bp'
 |                                          |
 |                        __________________| 'SUDV_FJ968794 18891 bp'
 |                       |                  |
 |                       |                  , 'SUDV_KC589025 18891 bp'
 |                       |                  |
 |                       |                  , 'SUDV_AY729654 18891 bp'
 |                 ______|                  |
 |                |      |                  | 'SUDV_JN638998 18891 bp'
 |                |      |
 |                |      |                , 'RESTV_FJ621584 18891 bp'
 |                |      |                |
 |                |      |________________|, 'RESTV_JX477165 18891 bp'
 |                |                       ,|
 |                |                       || 'RESTV_FJ621583 18891 bp'
 |                |                       |
 |                |                       |, 'RESTV_JX477166 18891 bp'
 |                |                       ||
 |                |                       || 'RESTV_AB050936 18891 bp'
 |                |                        |
 |                |                        | 'RESTV_FJ621585 18891 bp'
 |                |
 |                |           , 'EBOV_2014_KM034561 18891 bp'
 |                |           |
 |                |           | 'EBOV_2014_KM034562 18891 bp'
 |                |           |
 |                |           |, 'EBOV_2014_KM034557 18891 bp'
 |         _______|           ||
 |        |       |           |, 'EBOV_2014_KM034558 18891 bp'
 |        |       |           ||
 |        |       |           || 'EBOV_2014_KM034556 18891 bp'
 |        |       |           ||
 |        |       |           ,| 'EBOV_2014_KM034560 18891 bp'
 |        |       |           ||
 |        |       |           |, 'EBOV_2014_KM233113 18891 bp'
 |        |       |           ||
 |        |       |           || 'EBOV_2014_KM233114 18891 bp'
 |        |       |           ||
_|        |       |           |, 'EBOV_2014_KM233116 18891 bp'
 |        |       |           ||
 |        |       |           |, 'EBOV_2014_KM233115 18891 bp'
 |        |       |           ||
 |        |       |           |, 'EBOV_2014_KM233117 18891 bp'
 |        |       |           ||
 |        |       |           || 'EBOV_2014_KM233118 18891 bp'
 |        |       |           |
 |        |       |           | 'EBOV_2014_KM034559 18891 bp'
 |        |       |           |
 |        |       |___________| 'EBOV_2014_KM034563 18891 bp'
 |________|                   |
 |        |                   |, 'EBOV_1976_KC242801 18891 bp'
 |        |                   ,|
 |        |                   || 'EBOV_1976_AF272001 18891 bp'
 |        |                   |
 |        |                   |, 'EBOV_1995_KC242796 18891 bp'
 |        |                   ||
 |        |                   || 'EBOV_1995_KC242799 18891 bp'
 |        |                   |
 |        |                   |, 'EBOV_2007_KC242788 18891 bp'
 |        |                   ||
 |        |                   || 'EBOV_2007_KC242787 18891 bp'
 |        |                   ||
 |        |                    , 'EBOV_2007_KC242784 18891 bp'
 |        |                    |
 |        |                    , 'EBOV_2007_KC242785 18891 bp'
 |        |                    |
 |        |                    | 'EBOV_2007_KC242790 18891 bp'
 |        |                    |
 |        |                    , 'EBOV_2007_KC242786 18891 bp'
 |        |                    |
 |        |                    | 'EBOV_2007_KC242789 18891 bp'
 |        |
 |        |_________ 'TAFV_FJ217162 18891 bp'
 |
 | 'BDBV_FJ217161 18891 bp'
 |
 | 'BDBV_KC545396 18891 bp'
 |
 | 'BDBV_KC545394 18891 bp'
 |
 | 'BDBV_KC545393 18891 bp'


In [4]:
fig = plt.figure(figsize=(16, 22))
ax = fig.add_subplot(111)
Phylo.draw(ebola_simple_tree, axes=ax, branch_labels=
           lambda c: c.branch_length if c.branch_length > 0.02 else None)



In [5]:
fig = plt.figure(figsize=(16, 22))
ax = fig.add_subplot(111)
from collections import OrderedDict
my_colors = OrderedDict({
'EBOV_2014': 'red',
'EBOV': 'magenta',
'BDBV': 'cyan',
'SUDV': 'blue',
'RESTV' : 'green',
'TAFV' : 'yellow'
})

def get_color(name):
    for pref, color in my_colors.items():
        if name.find(pref) > -1:
            return color
    return 'grey'

def color_tree(node, fun_color=get_color):
    if node.is_terminal():
        node.color = fun_color(node.name)
    else:
        my_children = set()
        for child in node.clades:
            color_tree(child, fun_color)
            my_children.add(child.color.to_hex())
        if len(my_children) == 1:
            node.color = child.color
        else:
            node.color = 'grey'

ebola_color_tree = deepcopy(ebola_tree)
color_tree(ebola_color_tree.root)
Phylo.draw(ebola_color_tree, axes=ax, label_func=
           lambda x: x.name.split(' ')[0][1:] if x.name is not None else None)



In [7]:
fig = plt.figure(figsize=(22, 22))
ax = fig.add_subplot(111)

def simplify_name(n):
    if n.is_terminal():
        return n.name[n.name.rfind('_') + 1:n.name.find(' ')]
    else:
        return None
    
Phylo.draw_graphviz(ebola_color_tree, label_func=simplify_name, axes=ax, with_labels=True)



In [ ]: