为 'good looking' 图表布局安排 nodes-edges

Arranging nodes-edges for 'good looking' graph layout

我遇到了论文 NodeTrix 中提出的以下图形布局:

可见的大块是节点本身(一种 sub-graph 的复合节点)。

我看到边缘是某种曲线,它们之间似乎没有太多相交。此外,节点和边之间不相交。顺便说一句,论文不谈论它。

我希望实现这个可视化。我有以下疑问:

Q1。这是一些特定的算法来安排 Nodes-Edges 以便图形 看起来不错 ,如本文所示?一般还有其他算法吗?

Q2。上面显示的弯曲边缘是否也有一些特殊算法?

如果有人能直观地找出上图中的确切算法就太好了,但是一些通用的类似算法也应该可以。

一种算法是Force-directed graph drawing. It will produce an output very different from the posted picture, but it is quite popular and might give you a place to start looking

老实说,我怀疑显示的图形是手动布局的。

编辑:对评论的回答

在示例中,所有节点都是方框,边 start/end 与方框的边成对角线。一种方法可以是

  1. 使用力方向放置盒子(或者可能是它的一些自定义版本,力取决于盒子的大小)
  2. 想象一下 "guide-edge" 直接在框的中心之间移动
  3. 计算引导边与框相交的位置,并将其用作实际绘制边的 start/end 点。
  4. 使真正的边缘从对角线开始,用bezier curves绘制曲线。

您可能希望将其表示为某种矢量格式,具有 bezier cures built in, e.g., svg.