graphviz中的正交边缘布局

时间:2018-03-01 15:39:54

标签: layout graphviz dot orthogonal

我正在使用graphviz来生成正交图:

graph G {
    layout=neato
    splines=ortho

    A1 [ pos="1,1!" ]
    A2 [ pos="2,1!" ]
    A3 [ pos="3,1!" ]
    A4 [ pos="4,1!" ]
    Ae [ pos="5,1!" style=invis]

    B1 [ pos="6,6!" ]
    B2 [ pos="6,5!" ]
    B3 [ pos="6,4!" ]
    B4 [ pos="6,3!" ]

    C1 [ pos="1,8!" ]
    C2 [ pos="2,8!" ]
    C3 [ pos="3,8!" ]
    C4 [ pos="4,8!" ]

    A1 -- C1
    A2 -- C2
    A3 -- B3
    A4 -- B4
    C3 -- B2
    C4 -- B1
}

产生以下内容: orthogonal graph

我的问题是:

  1. 是否有可能在没有neato和硬编码节点位置的情况下生成类似的布局?

  2. 如何强制连接到A3,A4,C3,C4的边缘与A1,A2,C1,C2,B1-4的情况下的节点中间完全对齐?

  3. 如何在不改变布局的情况下将A1-4,C1-4,B1-4包围成三个方框? (我已经尝试过子图集,但它们似乎不受neato布局支持; HTML表格是选项,但它们似乎不是很完美地连接到单元格 - 端口)

  4. 是否可以删除隐形" Ae"节点并保存当前布局? (当我刚删除" Ae"一些边缘改变了它们的布局......)

2 个答案:

答案 0 :(得分:0)

表示1.)没有
2.)只需使用pos
对于3.)请显示您的尝试,所以我们可以详细说明这一点 对于4.)没有

也许您尝试使用graphviz,如UML-Modelling或Visio-Tool。在核心中,graphviz更多的是用于创建布局作为输出,而不是将布局信息作为输入消耗。

答案 1 :(得分:0)

首先,在neato引擎或其他引擎中似乎没有边缘的pos属性。我按照this answer来解决这个问题。使用具有(宽度属性 0)的点形状来控制边缘。

代码示例如下:

digraph {
    graph [bgcolor=white size="5.0,6.66!"]
    node [fixedsize=true]
    P1 [label=hello fontname=FangSong pos="2.604,4.583!" shape=rect]
    P0 [label=graphviz fontname=FangSong pos="0.521,5.625!" shape=rect]
    point1 [label="" fontname=FangSong pos="1.562,5.625!" shape=point width=0]
    point2 [label="" fontname=FangSong pos="1.562,4.583!" shape=point width=0]
    P0 -> point1 [arrowhead=none]
    point1 -> point2 [arrowhead=none]
    point2 -> P1 [arrowhead=normal]
}

图是:

enter image description here