如果节点之间没有边,Graphviz会忽略rank属性

时间:2017-08-23 17:41:35

标签: graph graphviz dot

我正在思考Graphviz来渲染一些层次结构。到目前为止,子图的使用对于实现我正在寻找的东西来说是次优的。

这个是我想要的

enter image description here

(颜色代表层次结构中的不同层级,因此需要遵循此顺序)。为了制作这个图像,我使用了不可见的链接,但在现实世界的场景中,它确实不是一个选项。

然而,目前这就是我所得到的 enter image description here

使用此.dot文件

graph {
    // Global config
    rankdir=BT
    node [style="filled" fontcolor="white" shape="box"]
    // Rank (hierarchies)
    { rank=same; 258 }
    { rank=same; 259 }
    { rank=same; 260 }
    { rank=same; 261 262 }
    // Nodes
    // Tasks
    258 [label="John Cleese" fillcolor="#E8B04D"]
    // Project Goals
    259 [label="Michael Palin" fillcolor="#C0C56B"]
    // Identities
    260 [label="Eric Idle" fillcolor="#FF8D61"]
    // Virtues
    261 [label="Graham Chapman" fillcolor="crimson"]
    262 [label="Terry Jones" fillcolor="crimson"]
    // Edges
    259 -- 260 [style="bold" color="#3790af"]
}

Graphviz是否可以在边缘之前兑现等级?如果是这样,我将如何进行?

1 个答案:

答案 0 :(得分:3)

通过添加一些隐形边缘可以轻松解决您的问题,这些边缘可以使各种等级(您正确设置)按您的需要工作。注意在底部附近简单地添加了三个不可见的边缘:

graph {
    // Global config
    rankdir=BT
    node [style="filled" fontcolor="white" shape="box"]
    // Rank (hierarchies)
    { rank=same; 258 }
    { rank=same; 259 }
    { rank=same; 260 }
    { rank=same; 261 bl 262 }
    // Nodes
    // Tasks
    258 [label="John Cleese" fillcolor="#E8B04D"]

    // Project Goals
    259 [label="Michael Palin" fillcolor="#C0C56B"]

    // Identities
    260 [label="Eric Idle" fillcolor="#FF8D61"]

    // Virtues
    261 [label="Graham Chapman" fillcolor="crimson"]
    262 [label="Terry Jones" fillcolor="crimson"]

    // Edges
    259 -- 260 [style="bold" color="#3790af"]
258--259 [style=invis]
260--261 [style=invis]
260--262 [style=invis]
260--bl [style=invis]

bl [style=invis label="" height=0, width=0]

}

我还在中心添加了一个不可见的平衡节点bl,以帮助更好地使图表居中。

enter image description here