Graphviz中的节点分层

时间:2009-11-19 14:09:40

标签: graph visualization graphviz dot neato

我正在使用Graphviz创建一个图形(使用neato编译)。该图包含许多重叠节点,非常精细。然而,有一组大节点我更喜欢总是在其他小节点之上 - 尽管我更喜欢在图形中首先定义大节点(这使得它们在最底部绘制)。

任何方式我都可以强迫这个?

修改:
这是一个小例子,只是为了澄清我的意思:

graph G {
    node [style=filled,fillcolor=black];
    BigNode [fillcolor=skyblue,shape=Msquare];

    node [style=filled,fillcolor=red,shape=circle];
    edge [style=invis]
    1 -- BigNode[len=0.5];
    2 -- BigNode[len=1];
}

我希望BigNode能够在节点1上绘制。

2 个答案:

答案 0 :(得分:3)

我找到了一种(某种)解决方案......
我发现,如果你将节点定义推迟到最后,即使你之前为这个节点定义了边缘,它也会被绘制成最顶层。
我意识到这与我之前定义的内容相矛盾,但在这种情况下,这是唯一可行的解​​决方案,而且这是我最终必须使用的解决方案。

在我的简短例子中,你会这样做:

graph G {
    node[style=filled,fillcolor=black];
    // Definition of BigNode moved to the end of the file
    /*BigNode [fillcolor=skyblue,shape=Msquare];*/ 

    node[style=filled,fillcolor=red,shape=circle];
    edge[style=invis]
    1 -- BigNode[len=0.5];
    2 -- BigNode[len=1];

    // Defined after already defining edges for BigNode
    BigNode [fillcolor=skyblue,shape=Msquare];
}

在结果图表中,BigNode绘制在节点1

答案 1 :(得分:2)

我不认为这是可能的。官方neato guide讨论了第6页到第9页的节点分层。看起来你能做的最多就是调整边长和引脚节点:你实际上无法控制节点如何相互叠加。 / p>