1

我需要在 ete3 的树中获取节点号。

这是一个树的例子:

rooted_tree = Tree( "((A,B),(C,D));" )

print rooted_tree
#
#          /-A
#     /---|
#    |     \-B
#----|
#    |     /-C
#     \---|
#          \-D

然后我从这棵树中计算一些东西(对于这个问题并不重要),这些东西给了我树中每个节点的值,然后我在 ggplot 树中绘制。但是 ggplot 树需要节点号来绘制此信息,这里的问题是我无法找到代码以获取树的节点号"rooted_tree"

假设我想要 and 的祖先的节点号,AB怎样才能得到它?我只知道这样做:

ancestor = tree.get_common_ancestor("A","B")

ancestor.num但类似的东西ancestor.node_number不起作用......

4

1 回答 1

2

ete 树中的所有节点都是对象,它们没有数字,但它们具有标记为拓扑透视的哈希 ID

您可以通过以下方式访问这些拓扑 ID

ancestor = tree.get_common_ancestor("A","B")
print(ancestor.get_topology_id())

引用 ete3 文档:

get_topology_id(attr='name') 2.3 版中的新功能。

返回表示当前树拓扑的唯一 ID。具有相同拓扑的两棵树将产生相同的 id。如果树是无根的,请确保根节点不是二元的,或者在生成拓扑 ID 之前使用 tree.unroot() 函数。

这对于检测一堆树上的独特拓扑的数量很有用,而不需要全距离方法。

默认情况下,id 是根据终端节点的名称计算的。可以改为使用任何其他节点属性。

进一步参考: http ://etetoolkit.org/docs/latest/reference/reference_tree.html#get_topology_id

于 2021-01-10T14:39:03.173 回答