如何获得使用graphviz呈现的图形中节点的坐标

8

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

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

我正在使用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导出,这种情况下,还有哪些不同的库可以帮助解决问题?

1个回答

3

首先,您需要将Digraph对象 pipe 并解码为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中的每种格式,以找出最适合的格式。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接