Ham*_*jan 19 graphviz graph-drawing graph-layout
在制作图形时,我有完美的瘫痪.如果没有充分探索视觉的对称性,我很难理解正在发生的事情.我也是一个非常直观的学习者,我喜欢简化我刚刚学到的东西并将它们写在纸上.
Graphviz是一个自动绘制东西的好工具,但它可能更好.让我们从一个好图(一个状态机)的例子开始.没关系质量(它可以用更好的工具重新绘制)这个几乎是完美的,除了我将逆时针旋转45度以使对称性明显.然后,它应该让读者花更少的时间来弄清楚状态q1和q2是如何相似以及它们在何处不同.我认为,只有一种最好的方式来表示该图表,因为它旁边没有其他图形.
现在让我们来看一个不太完美的描述:
这看起来像是graphviz会生成的东西.是的,边缘是光滑的,但GAAAAWWWD这是不必要的混乱!它看起来像一张思维导图,而不是一张准备好消费的完成图.我相信人眼CRAVE(不能少)对称.是的,等级制度等也是重要因素.
我很惊讶没有更好的算法可用.有些人根本不是视觉学习者; 他们可以通过阅读符号来掌握抽象概念.不是我!
那么,我的问题是什么?那么,是否有更好的免费软件可用于绘制中小型图形?也许
谢谢!
让我知道如何改进这篇文章.
PS我花了10分钟在dia中画出一个类似的克隆.它仍然不是很完美,但它很方便制作,因为一切都按网格(我错过了一些小细节,但不想重新上传).LR_0需要来自上方的"开始--->"以让用户更快地掌握起始状态.
dou*_*oug 22
在多次尝试绘制图形并且未能获得您认为"最佳"的布局之后,您在这里提出了一个问题:是否有"[b] etter自由软件[用于绘制中小型图形".)您评估布局算法的唯一标准是它们与"表示该图表的最佳方式"的接近程度."最好的"当然,留给你决定.
这与尝试使用给定的编程语言解决问题,失败,然后要求更好的编程语言或多或少相同.
图形绘制算法的核心是优化程序,然后生成评估解决方案(这里的"解决方案"是指每个节点的坐标,它们共同构成一个布局).根据单个标准或一系列排序标准的最小化来评估这些解决方案 - 即,图的一个或多个属性的最小化 - 例如,交叉的边的总数,或距离的总和节点之间(或两者的组合,或这两者的一些加权组合),或与对称配置的接近程度.Graphviz由六种不同的布局算法组成(dot neato,fdp,sfdp,twopi和circo).其中,你似乎只使用了点; 然而,twopi和circo可能是更好的选择,因为它们严格的对称约束似乎与你自己对正确绘制图形的想法相匹配.
其次,你的问题的文本是针对"图形"和图形绘制,在阅读完整的描述后,我不认为你的问题与这两个概念有任何关系.
除了一般的图形绘制算法(如graphviz)之外,还有许多特定于域的布局算法,例如,Hasse图(用于表示顺序理论中的部分有序集),Barabasi-Albert图(无标度网络),以及鄂尔多斯 - 仁义(随机图).这些算法中的每一个都根据域提供的标准和约束生成图形布局 - 这应该向您表明所有域中没有单一的"最佳"布局.虽然您在问题中使用了"图形"一词,但您的描述表明您的问题与绘图状态机有关 - 这是一种高度特殊的图形.一般的图形绘制算法通常很难绘制这种专用图形,因为算法对域没有任何了解.事实上,我不知道状态图的任何布局算法 - 就像流程图没有一个(不一样,但相似).工作流程方面,您可以在graphviz中绘制图形,然后将其导入Omnigraffle进行微调 - 在Omnigraffle中,您将对节点和边缘位置进行细粒度控制.