代码之家  ›  专栏  ›  技术社区  ›  David Rabinowitz

如何防止图形中的边相互重叠

  •  47
  • David Rabinowitz  · 技术社区  · 15 年前

    我在graphviz中创建了一个图,但问题是边缘相互重叠(每行有5-7个节点),所以很难分辨每个节点连接的是哪个节点。

    如何使边缘不重叠?让他们互相交叉是可以的。

    3 回复  |  直到 7 年前
        1
  •  31
  •   marapet    15 年前

    我假设你有一个有向图,用点布局。

    我认为没有一个魔法开关可以防止边缘重叠。格拉夫维兹试图开箱即用。

    根据图表,一些可能有帮助的建议:

    • 边缘浓缩器 (concent=true):将具有公共端点的多个边合并为单个边,并且部分平行边共享其路径的一部分。
    • 端口 :边缘可以在特定端口(N、NE、E、SE、S、SW、W、NW、W、C、UUU)上具有其原点和端点。根据边端口的不同,边会更改其形状(样条线)。
    • 不可见节点 :在某些情况下,将不可见节点引入路由边缘可能会产生所需的效果。
        2
  •  15
  •   Stephan Schulze Joel Rein    9 年前

    另一种方法是向图形中添加重叠属性。允许的属性是scale(它会极大地增加输出的大小)或false(它不会增加太多的大小,但可能会导致边缘重叠节点)。

    overlap = scale;
    

    如果使用overlap=false,则可以通过添加属性来消除边缘与节点的重叠。 splines=true:

    overlap = false;
    splines = true;
    

    这将显著降低大型图形的生成时间。

        3
  •  8
  •   alfC    7 年前

    即使对于非常小的图表,我也看到了 graphviz ( neato , fdp )以生成重叠。例如:

    graph G {
    0;
    1;
    2;
    3;
    0--1 ;
    1--2 ;
    2--3 ;
    3--0 ;
    }
    

    在我的代码版本中生成一个叉号 2.38.0 . 从 documentation 他们建议尝试不同的随机种子。例如,这对我很有用:

    neato -Gstart=5 file.dot -Tps -o file.ps