Как мне изменить направление стрелок в моем python anytree графике? - PullRequest
0 голосов
/ 24 апреля 2020

Я строю деревья, которые предназначены для представления потока от листьев к root дерева, используя пакет anytree в python. У меня есть следующий код.

from anytree import Node
from anytree.exporter import DotExporter
A = Node('A')
B = Node('B', parent = A)
C = Node('C', parent = A)
DotExporter(A).to_picture('example.png')

И он производит следующее изображение.

enter image description here

Я хочу изменить это изображение таким что стрелки указывают в противоположном направлении. Я знаю, что в Graphviz добавление [dir=back] к строке определения ребра даст мне желаемый результат. Запустив следующий код:

for line in DotExporter(A):
    print(line)

, я получаю вывод:

digraph tree {
    "A";
    "B";
    "C";
    "A" -> "B";
    "A" -> "C";
}

Но как мне изменить вывод DotExporter из интерфейса anytree, чтобы добавить [dir=back] в линии определения кромок и обратное направление стрелок?

1 Ответ

0 голосов
/ 24 апреля 2020

Чтобы изменить атрибуты ребер, определенные для Dot с помощью DotExporter, вам необходимо изменить атрибут edgeattrfunc для DotExporter как таковой.

from anytree import Node
from anytree.exporter import DotExporter
A = Node('A')
B = Node('B', parent = A)
C = Node('C', parent = A)
DotExporter(A, edgeattrfunc = lambda node, child: "dir=back").to_picture('example.png')

Глядя на вывод, вы теперь get:

for line in DotExporter(A, edgeattrfunc = lambda node, child: "dir=back"):
    print(line)
digraph tree {
    "A";
    "B";
    "C";
    "A" -> "B" [dir=back];
    "A" -> "C" [dir=back];
}

, который производит следующее изображение.

enter image description here

...