2011-03-25 110 views
2

我想绘制两种边缘的图形,并且我希望两种边缘尽可能地从两边链接到每个节点。即如果类型A的边从左边进入,我希望类型B的所有边都退出到右边。我知道我可以指定指南针的方向,但我希望graphviz能够切换这个来减少图形的混乱。从graphviz分组输出边缘

这是可能的吗?

回答

2

如果您不想指定指南针点,则可能不想使用HTML like labelsports

如果您使用点,您仍然可以通过使用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

当然这只是有关分组头和边缘的尾巴,并且不保证两侧为不同类型的边缘。

+0

是的,我试过这个,但它仍然没有做我想要的。我会看看是否可以在一个单独的网页上更详细地解释我想实现的目标。 – Ketil 2011-03-28 07:09:31

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 :-) 

虽然我没有得到我的“节点”框,这个工作好,我的目的。