从graphviz分组输出边

时间:2011-03-25 21:22:46

标签: graphviz

我正在尝试绘制具有两种边缘的图形,并且我希望这两种边缘尽可能地从相对侧链接到每个节点。即如果A类型的边缘从左侧进入,我希望类型B的所有边缘向右退出。我知道我可以指定指南针方向,但我希望graphviz能够切换它以最大限度地减少图形混乱。

这可能是类似的吗?

2 个答案:

答案 0 :(得分:3)

如果您不想指定罗盘点,您可能也不想使用HTML like labelsports

如果您使用的是dot,则仍然可以使用sameheadsametail属性来实现类似的功能。来自参考文献:

  

具有相同头部和相同的边缘   同一个值的目标是相同的   点在头上

这使您可以对传出和传入边缘进行分组。这是一个简单的例子:

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

这当然只是对边缘的头部和尾部进行分组,并不保证不同类型边缘的相对边。

答案 1 :(得分: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 :-)

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