【问题标题】:How to force nodes to overlap by a specified amount in the dot language (graphviz)如何在点语言中强制节点重叠指定数量(graphviz)
【发布时间】:2012-09-12 09:06:51
【问题描述】:

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

非常感谢!

【问题讨论】:

  • 您几乎想为 DOT 编写自己的布局引擎,这并非易事。不过,可能还有其他方法可以实现它,也许可以使用 subgraph “cluster” 关键字(例如 subgraph clusterfoo{...})。如果您提及您希望它们重叠的原因可能会有所帮助,您要代表什么?
  • 是的,这些重叠的节点就像“集群”,在我的图表中我想展示许多这样的集群。每组重叠节点都属于一个组,在我的可视化中,将它们显示为重叠是标准的。所以,我想实现这个
  • 我认为dot 的重点是避免边缘和节点重叠?

标签: graph visualization graphviz dot graph-visualization


【解决方案1】:

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

但是,您指出:

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

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

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

但在进行任何实施之前,我认为您应该查看 graphviz 中已经内置的cluster functionality(@Daniel Kinsman 也指出),并考虑是否真的值得付出额外的努力来定制 DOT布局引擎实现,或者集群功能是否足以满足您的需求。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多