Как покрасить листья на дереве `ete3`? (Python 3)

Я только начал использовать ete3 и это круто.

Как я могу покрасить листья ete3 Дерево объекта с использованием цветового словаря? я сделал "c":None потому что я не хочу из c показывать.

Я хочу лучше контролировать рендеринг дерева, но не могу понять, как именно это сделать.

Я видел, что есть NodeStyle объекты, но я думаю, что это для фактических узлов. Это выглядит так TextFace Мне нужен объект, но я не знаю, как его использовать. Все примеры добавления меток.

# Build Tree
tree = ete3.Tree( "((a,b),c);" )
# Leaf mapping
D_leaf_color = {"a":"r", "b":"g","c":None}
# Set up style for circular tree
ts = ete3.TreeStyle()
ts.mode = "c"
# Draw Tree
tree.render("tree_test.png", dpi=300, w=500, tree_style=ts)

введите описание изображения здесь

Я посмотрел на этот вопрос, но он был довольно запутанным: как покрасить узлы дерева с фиксированным набором цветов?

1 ответ

Решение

Я бы сделал это так:

from ete3 import Tree, TextFace, TreeStyle

# Build Tree
tree = Tree( "((a,b),c);" )
# Leaf mapping
D_leaf_color = {"a":"red", "b":"green"}
for node in tree.traverse():
    # Hide node circles
    node.img_style['size'] = 0
    if node.is_leaf():
        color = D_leaf_color.get(node.name, None)
        if color:
            name_face = TextFace(node.name, fgcolor=color, fsize=10)
            node.add_face(name_face, column=0, position='branch-right')
# Set up style for circular tree
ts = TreeStyle()
ts.mode = "c"
ts.scale = 10
# Disable the default tip names config
ts.show_leaf_name = False
ts.show_scale = False
# Draw Tree
tree.render("tree_test.png", dpi=300, w=500, tree_style=ts)

Другие вопросы по тегам