【问题标题】:How to get nodes coordinates in graph rendered with graphviz如何获取用graphviz渲染的图形中的节点坐标
【发布时间】:2019-12-08 21:56:34
【问题描述】:

我正在实现一个逐步图形转换算法,其中在每个步骤中删除或添加节点,并希望将所有中间图形的跟踪记录为图像文件,其中节点一直呈现在相同位置直到被删除。这将有助于制作最终动画。

我想过从布局引擎计算的初始步骤中获取节点位置,然后将它们作为节点属性传递给后续步骤。

我正在使用 graphviz 库,但我找不到任何方法来获取渲染图中的节点坐标(pos 属性)。这是代码摘录。

    from graphviz import Digraph
    dot = Digraph()
    dot.node('x', label='hello')
    dot.node('y', label='world')
    dot.edge('x', 'y')
    dot.render(filename='hello.gv', view=True, cleanup=False)

我还检查了dot 对象,但什么也没找到。我错过了什么吗?我无法确认是否通过 API 导出职位。在这种情况下,哪个不同的库可以提供帮助?

【问题讨论】:

    标签: python graphviz dot graph-visualization


    【解决方案1】:

    首先,您需要pipe 并将您的 Digraph 对象解码为 JSON 格式。之后,您可以将 JSON 字符串转换为 JSON 对象并进行解析:

    # import JSON parser
    import json
    
    # decode the Digraph to JSON format
    json_string = dot.pipe('json').decode()
    
    # parse the resulting json_string
    json_dict = json.loads(json_string)
    
    # now, you have a JSON dictionary that has two relevant keys:
    # 'objects' for nodes and 'edges' for, well, edges.
    # you can iterate over the nodes and get the (x,y) position for each node as follows:
    for obj in json_dict['objects']:
        print(obj['name'], '\t', obj['pos'])
    

    我必须尝试 graphviz.FORMATS 中的每种格式才能找到最合适的格式。

    我知道可能为时已晚,但以防万一你或其他人需要答案。

    【讨论】:

      猜你喜欢
      • 2014-11-03
      • 2020-01-03
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 2017-11-16
      相关资源
      最近更新 更多