我正在使用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
我的问题是:
是否有可能在没有neato和硬编码节点位置的情况下生成类似的布局?
如何强制连接到A3,A4,C3,C4的边缘与A1,A2,C1,C2,B1-4的情况下的节点中间完全对齐?
如何在不改变布局的情况下将A1-4,C1-4,B1-4包围成三个方框? (我已经尝试过子图集,但它们似乎不受neato布局支持; HTML表格是选项,但它们似乎不是很完美地连接到单元格 - 端口)
是否可以删除隐形" Ae"节点并保存当前布局? (当我刚删除" Ae"一些边缘改变了它们的布局......)
答案 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]
}
图是: