1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
import os
from ete3 import Tree, faces
from ete3.treeview.main import TreeStyle, NodeStyle, random_color
import colorsys
import random
# ::::::::::::::
# Layout actions
# ::::::::::::::
def sphere_map(node):
# Creates a random color sphere face that will be floating over nodes
bubble = faces.CircleFace(random.randint(5,40), random_color(), "sphere")
bubble.opacity = 0.7
faces.add_face_to_node(bubble, node, 0, position="float")
def random_background(node):
# Set a random background color for each node partition
node.img_style["bgcolor"] = random_color()
def leaf_name(node):
if node.is_leaf():
nameF = faces.AttrFace("name")
nameF.border.width = 1
faces.add_face_to_node(nameF, node, 0, position="branch-right")
def aligned_faces(node):
if node.is_leaf():
for i in range(3):
F = faces.TextFace("ABCDEFGHIJK"[0:random.randint(1,11)])
F.border.width = 1
F.border.line_style = 1
F.inner_background.color = "lightgreen"
F.border.width = 1
F.inner_border.width = 1
F.background.color = "darkgreen"
F.border.width = 2
F.vt_align = random.randint(0,4)
F.hz_align = random.randint(0,4)
F.margin_bottom = random.randint(1, 20)
F.margin_right = random.randint(1, 20)
F.margin_left = random.randint(1, 20)
F.margin_top = random.randint(1, 20)
faces.add_face_to_node(F, node, i, position="aligned")
if random.randint(0, 1):
faces.add_face_to_node(F, node, i, position="aligned")
def master_ly(node):
random_background(node)
sphere_map(node)
leaf_name(node)
aligned_faces(node)
def tiny_ly(node):
node.img_style["size"] = 2
node.img_style["shape"] = "square"
size = 15
t = Tree()
t.populate(size, reuse_names=False)
I = TreeStyle()
I.mode = "r"
I.orientation = 0
I.layout_fn = master_ly
I.margin_left = 100
I.margin_right = 50
I.margin_top = 100
I.arc_start = 45
I.arc_span = 360
I.margin_bottom = 50
I.show_border = True
I.legend_position = 4
I.title.add_face(faces.TextFace("HOLA MUNDO", fsize=30), 0)
I.draw_aligned_faces_as_table = True
def test(node):
if node.is_leaf():
faces.add_face_to_node(faces.AttrFace("name"), node, 0, position="aligned")
I.aligned_header.add_face( faces.TextFace("H1"), 0 )
I.aligned_header.add_face( faces.TextFace("H1"), 1 )
I.aligned_header.add_face( faces.TextFace("H1"), 2 )
I.aligned_header.add_face( faces.TextFace("H1111111111111"), 3 )
I.aligned_header.add_face( faces.TextFace("H1"), 4 )
I.aligned_foot.add_face( faces.TextFace("FO1"), 0 )
I.aligned_foot.add_face( faces.TextFace("FO1"), 1 )
I.aligned_foot.add_face( faces.TextFace("FO1"), 2 )
I.aligned_foot.add_face( faces.TextFace("F1"), 3 )
I.aligned_foot.add_face( faces.TextFace("FO1"), 4 )
I.legend.add_face(faces.CircleFace(30, random_color(), "sphere"), 0)
I.legend.add_face(faces.CircleFace(30, random_color(), "sphere"), 0)
I.legend.add_face(faces.TextFace("HOLA"), 1)
I.legend.add_face(faces.TextFace("HOLA"), 1)
# Creates a random tree with 10 leaves
t2 = Tree()
t2.populate(10)
# Creates a fixed NodeStyle object containing a TreeFace (A tree image
# as a face within another tree image)
# t.add_face(faces.TreeFace(t2, I), "branch-right", 0)
# Attach the fixed style to the first child of the root node
# t.children[0].img_style = style
I.rotation = 90
I.mode = "c"
t.show(tree_style=I)
#t.render("/home/jhuerta/test.svg", img_properties=I)
#t.render("/home/jhuerta/test.pdf", img_properties=I)
#t.render("/home/jhuerta/test.png", img_properties=I)
#t.render("/home/jhuerta/test.ps", img_properties=I)
#os.system("inkscape /home/jhuerta/test.svg")
#I.mode = "c"
#t.show(img_properties=I)
|