从Graphviz中对输出边进行分组

5
我正在尝试绘制一张具有两种类型边缘的图表,我希望这两种类型的边缘尽可能地从相反的方向连接到每个节点。例如,如果类型A的边缘从左侧进入,则我希望所有类型B的边缘从右侧退出。我知道我可以指定罗盘方向,但我希望graphviz能够切换以最小化图形混乱。是否有可能实现这一点或类似的功能?
2个回答

5
如果您不想指定罗盘点,那么您可能也不想使用HTML标签端口
如果您正在使用dot,则仍然可以通过使用sameheadsametail属性来实现类似的功能。从参考文献中可以了解到:
边缘与相同的头部和相同的samehead值指向头部上的相同点。
这样可以将出站和入站边缘分组。以下是一个简单的示例:
digraph g{
    rankdir=LR;
    edge[samehead=h1, sametail=t1];
    a1->b->c1;
    a2->b->c2;
    edge[samehead=h2, sametail=t2];
    a3->b->c3;
    a4->b->c4;
}

graphviz output

当然,这只是关于将边的头和尾分组,不能保证不同类型边的相对面。

是的,我已经尝试过这个了,但它仍然不能满足我的需求。我会看看能否在另一个网页上提供更详细的解释,以便实现我想要的目标。 - Ketil

0
我的当前解决方案是用边替换旧节点,从而创建两个节点——图形中的每个“端口”都有一个。然后我就可以在这些“端口节点”之间建立边了。例如,不是
node1 -> node2 [ sametail="b", samehead = "a" ]

我写

node1_a -> node1_b [ dir=none, style=bold ]
node2_a -> node2_b [ dir=none, style=bold ]

node1_a -> node2_b // if I got head and tail right :-)

虽然我没有为我的“节点”获得盒子,但这对我的目的来说还可以。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接