Из графика в файл .dot python - PullRequest
       12

Из графика в файл .dot python

0 голосов
/ 26 февраля 2020

У меня есть дерево, представленное этой строкой (это дерево решений, сделанное с нуля): {'index': 1, 'right': {'index': 0, 'right': 'no' , 'value': 'overcast', 'left': 'Yes'}, 'value': 'Mild', 'left': {'index': 0, 'right': {'index': 0, 'right ':' Yes ​​',' value ':' overcast ',' left ':' Yes ​​'},' value ':' rain ',' left ': {' index ': 0,' right ':' Yes ​​', 'value': 'rain', 'left': 'Yes'}}}

, и я хотел бы представить его (с ребрами и узлами, используя Graphviz). Чтобы напечатать его, я использую эту функцию в Python:

def print_tree(node, depth=0):
    filename = outlook.csv'
    dataset = load_csv(filename)
    columns = dataset[0]
    if isinstance(node, dict):

        print('%s[%s = %s]' % ((depth * ' ', (columns[node['index']]), node['value'])))
        print_tree(node['left'], depth+1)
        print_tree(node['right'], depth+1)
    else:
        print('%s[%s]' % ((depth*' ', node)))

Я хотел бы использовать Digraph из GraphViz из графического импорта Digraph

 def createGraph(node):
 dot = Digraph(comment="experiment")
 def graph(node):
  if isinstance(node, dict):
    dot.node(str(id(node)))
    dot.edge(str(id(node)) , str(id(node['right'])))
    graph(node['left'])
    graph(node['right'])
  else:
    dot.node(str(id(node)), str(node))
  dot.render('test-output/roundround5.gv', view=True)
 'test-output/round.gv.pdf'
graph(node)

, но, очевидно, код неправильный. Кто-нибудь может помочь?

1 Ответ

1 голос
/ 26 февраля 2020

В ваших блоках кода есть некоторые синтаксические ошибки, имя файла outlook.csv указано неверно, а в конце графического блока есть дополнительная строка 'test-output/round.gv.pdf'.

Основная проблема, как представляется, будь то, что вы создаете новый Digraph объект для каждого вызова graph(), и вы вызываете graph рекурсивно. Вместо этого вам нужно сделать один Digraph и передать его в первый вызов graph, а затем рекурсивно добавить узлы графа.

Можете ли вы немного расширить свой вопрос - устранить синтаксические ошибки, а затем привести пример ошибки или неправильного вывода, который вы видите?

...