如果节点之间没有边,Graphviz 将忽略等级属性

标签 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 是否可以在边缘之前尊重等级?如果是这样,我将如何进行?

最佳答案

您的问题很容易通过添加一些不可见的边缘来解决,这些边缘可以使各种等级(您正确设置)按您想要的方式工作。请注意在底部附近简单添加了三个不可见的边缘:

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

关于如果节点之间没有边,Graphviz 将忽略等级属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45846207/

相关文章:

algorithm - 什么是 Dijkstra 的最小生成树?

python - subprocess.Popen(..).communicate(..) 与 graphviz 一起使用时会随机丢弃数据!

graphviz - Graphviz 中集群之间的直边

graphviz - 如何删除点语言中的文本(graphviz)

python - 在python中将点转换为png

java - AndroidPlot - 从 GraphWidget 中删除域值

javascript - cy.fit() 不会立即工作,它需要超时来适应图表。 Cytoscape.js

java - 荣格图书馆入门

r - DiagrammeR 和 graphviz

graphviz - 如何以人类可读的方式呈现复杂的依赖关系图(点)?