如何在Python中创建DOT文件?

4
我有一个数字电路模拟器,需要几乎与这个问题(和答案)中的电路图完全相同的电路图:Block diagram layout with dot/graphviz 这是我第一次接触DOT和graphviz。幸运的是,DOT语言规范是可用的,也有许多示例。
然而,仍有一个细节对我来说不太清楚,作为一个完全的新手,我想问:我有完整的数据来绘制图形。我如何从中创建一个DOT文件?
逐行作为文本?
# SIMPLIFIED PSEUDOCODE
dotlines = ["digraph CIRCUIT {"]
for node in all_nodes:
    dotlines.append("  {}[{}];".format(node.name, node.data))
for edge in all_edges:
    dotlines.append("  {} -> {};".format(edge.from_name, edge.to_name))
dotlines.append['}']
dot = "\n".join(dotlines)

或者我应该将我的数据进行转换,并使用一些模块将其导出为DOT格式?

2
文件格式似乎足够简单,我看不出为什么要引入一个库(特别是因为任何库都可能要求您使用它们自己的数据结构提供图形)。 - Matteo Italia
1
我建议您使用 gvgen。这使得它非常简单。 - Paul Prescod
2个回答

11

你可以考虑使用pygraphviz

>>> import pygraphviz as pgv
>>> G=pgv.AGraph()
>>> G.add_node('a')
>>> G.add_edge('b','c')
>>> G
strict graph {
        a;
        b -- c;
}

我不同意@MatteoItalia的评论(也许这只是个口味问题)。你应该熟悉可用于你任务的包。你可以从简单的图表开始,而且不需要使用一个(非常简单的)包。在某些时候,你的图表可能变得更加复杂,但你仍然会使用自己的解决方案来处理一些已经存在的东西。


我后悔使用pygraphviz,因为它有非常重的依赖关系。 - Paul Prescod
3
我深入查看了谷歌搜索结果,发现了 gvgen 这个跨平台安装更为简单的工具。 - Paul Prescod

1

你可以使用 gvgen。这是一个纯Python库。

通过pip install gvgen进行安装。

例:

>>> from gvgen import GvGen
>>> g = GvGen()
>>> a = g.newItem('a')
>>> b = g.newItem('b')
>>> c = g.newItem('c')
>>> _ = g.newLink(b, c)
>>> g.dot()
/* Generated by GvGen v.1.0 (https://www.github.com/stricaud/gvgen) */

digraph G {
compound=true;
   node1 [label="a"];
   node2 [label="b"];
   node3 [label="c"];
node2->node3;
}

感谢Paul Prescod的评论


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