【问题标题】:From graph to .dot file python从图形到 .dot 文件 python
【发布时间】:2020-06-10 15:35:58
【问题描述】:

我有一个由这个字符串表示的树(这是一个从头开始制作的决策树): {'index': 1, 'right': {'index': 0, 'right': 'no', 'value': 'overcast', 'left': 'Yes'}, 'value': '轻度','左':{'索引':0,'右':{'索引':0,'右':'是','值':'阴','左':'是'} , '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)))

我想使用 GraphViz 的 Digraph 从graphviz导入有向图

 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)

但显然代码是错误的。有人可以帮忙吗?

【问题讨论】:

  • 您正在为图中的每个节点创建一个全新的 Digraph() 对象。您需要这样做,并在递归函数的外部最后进行渲染,以便它只发生一次。此外,由于使用节点的id() 作为 Graphviz 节点名称,您可能会遇到一些问题。这将适用于您的内部节点,但对于只是一个字符串的叶节点,是否所有这些 'Yes' 节点(例如)都将具有相同的 id 是未定义的。
  • 这是一个从二叉树创建点文件的示例 - 实际上,它是一个treap,因此是二叉树和二叉堆的混搭:stromberg.dnsalias.org/svn/treap/trunk/m4_treap.m4。随意突袭它的想法。顺便说一句,扩展名是“.m4”,但这只是一个预处理器,这样我就可以从同一个文件中生成纯 python 和 cython。要获取 .py,只需运行 m4 -Dpy=1 py_treap.py
  • 为什么你的代码“明显错误”?您的帖子中缺少它,因此您可能需要 edit 并添加它。
  • @jasonharper 你是对的。我编辑了我的代码,但我总是遇到问题。
  • 如果您告诉我们这些问题是什么,我们或许能够更有效地提供帮助。

标签: python decision-tree


【解决方案1】:

您的代码块中有一些语法错误,文件名outlook.csv 引用不正确,图形块末尾有一个额外的字符串'test-output/round.gv.pdf'

主要问题似乎是您正在为每次调用Digraph 构建一个新的Digraph 对象,并且您正在递归调用graph。相反,您需要创建一个Digraph,并将其传递给graph 的第一次调用,然后递归地添加图形节点。

您能否稍微扩展您的问题 - 解决语法错误,然后提供您看到的错误或不正确输出的示例?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2017-06-15
    相关资源
    最近更新 更多