2013-03-03 76 views
18

我想强制点仅显示节点之间的垂直或水平边缘。用点强制正交(垂直或水平)边缘

我找到了一个职位Family tree layout with Dot/GraphViz类似的要求,但我不处理的树木,所以我希望有不插入额外的节点的解决方案......

如果我建立如下图:

 
digraph G { 

    splines=ortho 

    A [ shape=box ] 
    B [ shape=box ] 
    C [ shape=box ] 
    D [ shape=box ] 

    A -> B 
    A -> C 

    B -> D 
    C -> D 

} 

我所得到的是这样的:

enter image description here

不过,我想这样的一个图表:

enter image description here

我怎样才能得到这样的渲染?

编辑:“splines”属性似乎不像预期的那样工作...有什么我做错了吗?

回答

23

您的语法看起来正确。当我运行它,我得到正交边缘路由(的排序):

enter image description here

您有哪些版本?

我问,因为正交边缘路由仅适用于2010年9月28日及更新的Graphviz版本。并非所有系统都包含更新的版本。在我的系统上,我必须download并手动安装Graphviz以获得比2.26.3更新的版本(即2010年1月26日起)。

假设你的实际的图形包含超过4个节点,如果你想行有一个弯道,你不想增加额外的(无形)节点,你应该尝试与 图表玩耍nodesep属性。查看下面的代码和图片。

digraph G { 

    graph [splines=ortho, nodesep=1] 
    node [shape=record] 

    A -> {B, C} -> D 
} 

enter image description here