2016-02-22 7 views
2

Я хотел бы изменить ориентацию шрифта стоит на выходном изображении, который производится ETE Toolkit: http://etetoolkit.orgКак изменить шрифт ориентации на узле этикеток с ETE Toolkit (Python)

Для некоторых вращения причины и изменение ориентации не влияет на метки, как показано на рисунке ниже:

ETE

кодекса производить этот пример на ноутбуке Jupiter следующая:

from ete3 import Tree, TreeStyle 

def draw_ete(newick): 
    t = Tree(newick) 
    ts = TreeStyle() 
    ts.scale = 5 
    ts.rotation = -90 
    ts.orientation = 1 
    return t.render("%%inline", tree_style=ts) 

newick = """((p, e, a, s, ((e, _), p, o), r, r, i, d, g, (e, _)), (h, o, t), ((,, ↵), (p, e, a, s, ((e, _), p, o), r, r, i, d, g, (e, _))), (c, (o, l, d)), ((,, ↵), (p, e, a, s, ((e, _), p, o), r, r, i, d, g, (e, _))), ((i, n), _, t, h, ((e, _), p, o), t, (,, ↵), n, (i, n), (e, _), d, a, y, s, _, (o, l, d), .), ↵, ↵, (s, o, m, (e, _), l, i, k, (e, _), i, t, _), (h, o, t), ((,, ↵), (s, o, m, (e, _), l, i, k, (e, _), i, t, _)), (c, (o, l, d)), ((,, ↵), (s, o, m, (e, _), l, i, k, (e, _), i, t, _)), ((i, n), _, t, h, ((e, _), p, o), t, (,, ↵), n, (i, n), (e, _), d, a, y, s, _, (o, l, d), .));""" 
draw_ete(newick) 

Я также хотел бы знать, можно ли разделить вывод на несколько строк вместо одной строки? Длинные последовательности, как правило, занимают огромное пространство ширины, поэтому было бы целесообразно разделить последовательность на несколько строк.

ответ

2

ответ из списка рассылки etetoolkit:

1) вращение возможно с помощью пользовательских макетов и TextFaces. Проверьте этот пример:

from ete3 import Tree, TreeStyle, add_face_to_node, TextFace 

from random import randint 

def rotation_layout(node): 
    if node.is_leaf(): 
     F = TextFace(node.name, tight_text=True) 
     F.rotation = randint(0, 360) 
     add_face_to_node(TextFace("third"), node, column=8, position="branch-right") 
     add_face_to_node(TextFace("second"), node, column=2, position="branch-right") 
     add_face_to_node(F, node, column=0, position="branch-right") 

     F.border.width = 1 
     F.inner_border.width = 1 

def get_example_tree(): 
    t = Tree() 
    t.populate(10) 
    ts = TreeStyle() 
    ts.rotation = 45 
    ts.show_leaf_name = False 
    ts.layout_fn = rotation_layout 

    return t, ts 

if __name__ == "__main__": 
    t, ts = get_example_tree() 
    t.show(tree_style=ts) 

rotated tree labels

2) разделение на несколько строк: Я не полностью понимаю ваш вопрос, но если спрашивать об уменьшении ширины конечного дерева изображения, единственным способом будет разбивать чертеж на несколько вызовов рендеринга, по одному на каждый узел, который вы хотите нарисовать. Например. Чтобы разбить одно дерево на два независимых изображения, вы можете запустить:

t.children[0].render("left_side.png") 
t.children[1].render("right_side.png") 

3) Вы имеете в виду шкатулку в нижней части? Вы можете установить TreeStyle.show_scale=False