Graphviz用于文档编写。

16

我注意到doxygen使用graphviz库来创建图表。您是否曾经使用过graphviz来生成文档?在doxygen之外的文档编制中,学习graphviz是否值得?抑或是我最好坚持使用像Visio这样的标准数据建模工具?

我知道它作为绘图库的优点,但对于尝试表示更复杂的UML(或类似)图表,仍然值得考虑吗?

11个回答

21

Graphviz是一种非常简单的语言/格式,用于创建图形。如果该功能对您足够,我会推荐使用它(它非常容易学习,我估计学习时间最多只需要1小时)。


我同意。我不知道关于文档目的,但我能够在半小时内以编程方式生成有用的图表。我的印象是,一个小时对于基础知识可能是合理的。 - Jonathan Adelson
1
非常差的文档,完全缺乏示例... 我不认为你仅需要一个小时。我现在已经整天在尝试完成一些简单的 UML 事情了。 - Thanks
9
适合工作的正确工具:Graphviz在尝试使用UML方面会非常可怕,因为这不是它的设计目的。如果您需要快速显示项目之间的关系,则Graphviz将非常适用。但是如果您需要精确地放置项目,您会感到非常痛苦。 - Joe McMahon
2
如果你读了dot语言的PDF介绍,谢谢你。我认为它组织得很好,并且很好地展示了事物的进展。虽然它不是最新的资料,但我认为它是我见过的开源文档的最佳例子之一。http://www.graphviz.org/pdf/dotguide.pdf - Jay Carlton

12

如果您只是想创建类似Doxygen的继承/协作图表,值得研究一下可以自动完成此操作的IDE工具。对于从头开始或手动编写文档,我使用OmniGraffle(因为我使用Mac),非常推荐。

然而,GraphVizDOT也可以非常方便,不仅用于文档编写,还可用于调试和代码理解,特别是对于数据结构。通常我不手动编写DOT,但自动生成的DOT可以节省很多时间。

我发现GraphViz非常有用的其中一个场景是了解和调试二叉搜索树算法。我开发了CHDataStructures.framework,这是一个开源的Objective-C框架,其中包括几种不同类型的BST。我在父类上实现了两个方法:-(NSString*)dotGraphString和每个子类上的-(NSString*)dotGraphStringForNode:。在大约30-40行代码(大部分在CHAbstractBinarySearchTree.m底部)中,我增加了逐步遍历二叉树并创建DOT表示形式的功能,包括平衡信息、将节点着色为红色或黑色等(通过小心设置,您可以轻松地表示空的哨兵节点,并按正确的排序顺序显示树)。

在我的测试代码中,每次修改树后,我都会调用 -dotGraphString 并将结果保存到一个.dot文件中,在那里停下来断点,然后使用GraphViz打开该文件,当文件更新时,GraphViz会聪明地重新渲染DOT图。这种方法使得在树中发生的情况以及发现实现给定算法中的错误变得非常容易。这种方法可以相对容易地适应各种数据结构,并且通常比创建用于可视化结构的UI要快得多和容易得多。


10

Graphviz不能像Visio一样为您提供流畅的图形界面,但它可以生成排版良好的图表。我发现当我通过程序自动生成图表时(如使用doxygen),它非常有用。


5
我认为它通常会给你布局良好的图表。在某个复杂度水平之后,你会得到重叠等问题。图形渲染是一个非常困难的问题。有时候你能做的只有那么多... http://dysart.cs.byu.edu/CHDataStructures/inherits.html - Quinn Taylor
1
是的,我想重点在于Graphviz中的图形布局比其他程序中看到的要好得多。此外,它在您需要时可以让您控制布局。 - Carlos Rendon

6
我在文档中广泛使用GraphViz并经常使用GraphViz外部勾画关系图或架构图,然后使用@dot/@enddot将它们添加到Doxygen代码的额外页面中。我最近还开始使用@dotfile,这样可以将大量的点语句从代码文档中移出,并允许我继续使用GraphViz GUI进行预览。
GraphViz的另一个重大优势是其简单的文本格式非常适合版本控制。您可以在git diff中查看图表的更改,这对于任何二进制文档格式都是不可能的。随着多年来我越来越多地使用它,这一点变得越来越重要。
然而,对于UML,我使用真正的UML工具(Enterprise Architect),而不是在Visio中胡乱凑合。

6

Graphviz是最有用的用于通过dot程序生成依赖关系图的工具。 Visitors使用它来可视化网站访问情况;Hadoop/Cascading使用它来可视化Map-Reduce作业的执行计划。


4

是的,graphviz很容易学习,并且可以从程序中轻松使用。

此外,还可以看看yEd,这是一个处理图形的好工具。与Visio不同的是,它可以加载和保存各种易于手动编辑或程序生成的格式。自动布局功能也非常不错。


6
如果你非常喜欢使用Visio,可以使用Graphviz将图形输出为SVG格式(-Tsvg),然后将其读入Visio中。这样可以进行编辑以获得所需的布局,节省了很多繁琐的工作。 - Harold Bamford

3

我偶尔用它来说明状态机。graphviz非常适合这个。


2

我曾多次尝试使用Graphviz,但发现它的限制很大。

对于手动输入文本图表,我发现最好的工具是Tikz。我用它来制作FSM's

如果Graphviz的输出满足您的特定需求,那就没问题了。如果你对它的表现不太满意并且有一些TeX经验——看看Tikz吧。有许多不同的包可供选择,您不需要学习纯Tikz / PGF(这可能会显得非常复杂)。


2
同意这里的共识;我从Graphviz中获得了很多价值。它非常适合创建简单或者复杂的图表。软件开发人员往往喜欢使用图表,不仅在源代码中,而且其他方面也是如此。
例如,现在在另一个浏览器窗口中,我使用Graphviz图表(BTW使用Confluence插件显示)说明我们小组的分支和合并策略。
Graphviz也适用于UML。请参见本教程;它也是Graphviz的一个很好的入门介绍。

2

我们使用Graphviz自动生成对象图来作为我们UML验证工具的反馈。我们非常满意结果,因为我们可以提供一个图形化的结果而不必担心布局问题。


GraphViz通常会以与原始图表不同的方式布局图表。因此,我经常注意到在原始图表中被忽略的细节。 - CyberFonic

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