【发布时间】:2020-03-06 16:12:24
【问题描述】:
我有一个由节点组成的图表。每个节点可以有多个父节点和/或子节点。我想显示该图和节点之间的连接。
但我不知道如何重新分配节点以最大限度地提高可读性。目前我面临以下问题:
- 节点连接相互交叉过多,尽管这是不必要的并且可以规避
- 节点之间的连接在视觉上太长了
- 一些连接具有相同的角度,因此它们重叠并成为一条线
-
i列和i-2列之间的连接(以及更远的地方)有时会直接通过i-1列中的元素
我也只能垂直移动节点,不能水平移动,因为列的数量是有限的。
为了让我自己更容易,我尝试将节点放置在类似网格的模式中。我已经设法按列对它们进行分组。但后来我不知何故需要遍历列并将它们与其他列进行比较以重新排列东西。我不知道从哪里开始。
UPD:我可能错了,但我觉得我的图形对齐问题在某种程度上与最短路径的典型图形问题有关。除了在我的情况下,应该同时计算多个路径,并且某些节点只能传递一次。
在下面的图片中,您可以看到我只是在纸上涂鸦(从左到右的方向显示了父子连接)。
【问题讨论】:
-
正如here 所讨论的,绘制具有最少边交叉数的图形通常是一个 NP 难题,而且您的约束(列中的节点)似乎没有帮助.第一步是允许弯曲的边缘来帮助处理一些杂乱。链接中的资源可以帮助您进一步了解您需要做什么。
-
不幸的是,应用程序不支持弯曲的边缘。除此之外,我会查看链接。
-
您尝试过强制导向布局吗?这些将最大限度地减少重叠和交叉边缘......
-
不幸的是,我的水平空间有限,我无法做出径向力导向布局,尽管这听起来很有趣。
-
Vega 可能是另一个潜在的灵感来源,请查看 they do tree layouts 的方法。在this SO answer中查看更多关于使用算法的信息
标签: graph graph-theory graph-algorithm rectangles