13

我是graphviz中点布局的新手。我正在尝试用点语言指定一个图形,并且我希望某些节点集被强制重叠一定数量(比如它们的 70% 的区域或具有这种效果的东西)。我知道我可以强制节点的 x 和 y 位置,从而导致重叠,但在这种情况下,我正在编写一个 C# 程序,给定某些输入会吐出图形的相关点脚本,所以节点的数量等是没有硬编码,所以我无法想出一个方案来硬编码所有节点的 x 和 y 位置。对此的任何帮助将不胜感激!

非常感谢!

4

2 回答 2

4

正如@ninjalj 指出的那样,graphviz 的一个巧妙之处在于,它允许您很好地表示图形并消除重叠之类的“缺陷”或“不完美”——例如,通过使用 和 等overlap属性overlap_scaling

但是,您指出:

我知道我可以强制节点的 x 和 y 位置,从而引起重叠,但在这种情况下,我正在编写一个 C# 程序,给定某些输入会吐出图形的相关点脚本,所以节点的数量等是没有硬编码,所以我无法想出一个方案来硬编码所有节点的 x 和 y 位置。

所以,正如我所看到的,你说的是你知道当你得到一个特定的输入时,你将生成一个特定的图——换句话说,你知道节点(和集群)的数量是输入。这让我认为@Daniel Kinsman 的建议可能是适合您的方式 - 也就是说,为特定目的实现您自己的 DOT 布局引擎。

我并不是说这很简单,但是,这并非不可能,当然所需的逻辑很大程度上取决于您的应用程序的目标。

但是在进行任何实现之前,我认为您应该先看看 graphviz 中已经内置的cluster功能(@Daniel Kinsman 也指出了这一点),并考虑是否真的值得付出额外的努力来实现自定义 DOT 布局引擎,或者如果集群功能对您来说可能就足够了。

于 2012-09-06T16:11:46.333 回答
1

这可能有用:您可以使用 graphviz 的输出格式,它输出节点及其显式布局位置。然后你可以读回它,并改变它们的大小。如果没有一些您想要的演示图像,很难判断这是否有助于您的特定需求。此外,这可能不是最好的解决方案。只是想我会将它添加到您可以使用的工具库中。

于 2012-09-12T01:06:51.557 回答