我是graphviz中点布局的新手。我试图用点语言指定一个图形,我希望某些节点集合被强制重叠一定量(比如它们面积的70%或具有该效果的东西)。我知道我可以强制节点的x和y位置,从而引起重叠,但在这种情况下,我正在编写一个C#程序,给定某些输入吐出图形的相关点脚本,所以节点的数量等等没有硬编码,所以我无法想出一个硬编码所有节点的x和y位置的方案。 任何帮助都将非常感谢!
非常感谢!
答案 0 :(得分:4)
正如@ninjalj指出的那样,关于graphviz的一个巧妙的事情是,它允许你很好地表示图形并摆脱重叠的“缺陷”或“缺陷” - 例如使用overlap
和overlap_scaling
等属性。
但是,你指出:
我知道我可以强制节点的x和y位置,从而引起重叠,但在这种情况下,我正在编写一个C#程序,给出某些输入吐出相关的图形点脚本,所以节点的数量等等都没有硬编码,所以我无法想出一个硬编码所有节点的x和y位置的方案。
所以,正如我所看到的,你所说的是你知道当你获得某个输入时,你将生成一个特定的图形 - 换句话说,你知道节点(和集群)的数量为输入的功能。这让我觉得@Daniel Kinsman的建议可能是你的选择 - 也就是说,为了这个特定目的而实现你自己的DOT布局引擎。
我并不是说这很简单,但是,这并非不可能,所需的逻辑当然在很大程度上取决于你的应用目标。
但是在做任何实现之前,我认为你应该看看已经内置到graphviz中的cluster
functionality(@Daniel Kinsman也指出了这一点)并考虑是否真的值得花费额外的努力去做自定义DOT布局引擎实现或者群集功能可能对您来说足够了。
答案 1 :(得分:1)
这可能有用:您可以使用graphviz的dot输出格式,该格式输出节点及其显式布局位置。然后你可以重读它,并改变它们的大小。如果没有一些关于你想要什么的演示图像,很难说这是否有助于您的特定需求。这也许不是最好的解决方案。我以为我会把它添加到你可以使用的工具库中。