如何在dot语言(graphviz)中强制节点重叠指定的量

13

我是一个graphviz中点布局的新手。我正在尝试用dot语言来指定一张图形,并且希望某些节点集合强制重叠一定量(例如其面积的70%或其他类似效果)。我知道我可以强制指定节点的x和y位置,从而引起重叠,但在这种情况下,我正在编写一个C#程序,该程序根据特定输入生成相关的dot脚本,因此节点数量等并非硬编码,所以我无法想出一种方案来硬编码所有节点的x和y位置。

任何帮助将不胜感激!


你几乎想为DOT编写自己的布局引擎,这并不容易。虽然可能有其他方法来实现它,也许可以尝试使用子图“cluster”关键字(例如,subgraph clusterfoo{...})。如果你能说明为什么想要它们重叠,你试图表示什么,这可能会有所帮助。 - Daniel Kinsman
是的,这些重叠的节点就像“簇”一样,在我的图中我想展示许多这样的簇。每组重叠的节点都属于一个组,而在我的可视化中,将它们显示为重叠是标准的。因此,我想实现这个功能。 - assassin
我认为dot的整个目的是为了避免边缘和节点重叠,不是吗? - ninjalj
2个回答

4
正如@ninjalj所指出的那样,graphviz的一个很棒的特点是,它可以很好地表示图形并摆脱“缺陷”或“不完美”,比如重叠-例如通过使用属性,如overlapoverlap_scaling
但是,您指出:

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

所以,我认为您的意思是,当您获得某些输入时,您将生成某个图表-换句话说,您知道节点(和集群)的数量是输入的函数。这使我认为@Daniel Kinsman的建议可能适合您-也就是说,为特定目的实现自己的DOT布局引擎。
我不是说这很简单,但它并非不可能,所需的逻辑当然在很大程度上取决于您的应用目标。
但在进行任何实现之前,我认为您应该查看graphviz中已经内置的cluster功能(@Daniel Kinsman也指出了这一点),并思考一下是否真的值得额外努力去做自定义DOT布局引擎实现或者集群功能对您是否足够。

1
这可能会有用:您可以使用graphviz的dot输出格式,该格式输出节点及其明确的布局位置。然后您可以将其读回并更改其大小。很难确定这是否有助于满足您的具体需求,除非提供一些演示图像以说明您想要的内容。此外,这可能不是最佳解决方案。只是想把它添加到您可以使用的工具库中。

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