首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Graphviz:重新排列线/节点

Graphviz:重新排列线/节点
EN

Stack Overflow用户
提问于 2021-12-15 14:34:44
回答 1查看 99关注 0票数 0

我应该使用Graphviz创建一个图,它看起来应该类似于

目前使用的是:

代码语言:javascript
复制
digraph Graph {
    // Nodes
    User [style=filled, color="#ff000055"]
    Kernel [style=filled, color="#ff000055"]
    Runnable [style=filled,color=dodgerblue]
    Swapping [style=filled,color=dodgerblue]
    Disk [style=filled, color=dodgerblue]
    Sleep [style=filled, color=dodgerblue]
    Lock [style=filled, color=dodgerblue]
    Idle [style=filled, color=dodgerblue]
    helpNode [style="invis"]

    // Edges
    User -> Kernel [dir=both,label = "mode switch"]
    Kernel -> Runnable [label = "preemption or time quantum expired"]
    Runnable -> Kernel [label = "schedule"]
    Runnable -> Swapping [label = "swap out"]
    Swapping -> Runnable[label = "swap in"]
    
    Kernel -> Disk
    Kernel -> Sleep
    Kernel -> Lock
    Kernel -> Idle
    Disk -> Sleep -> Lock -> Idle [style="invis"]

    
    // ranking
    {rank=same;Kernel;Runnable;Swapping}
}

若要创建此功能,请执行以下操作:

有没有办法重新安排节点或线路?已经尝试了一些有子图和不同等级类型的东西。

EN

回答 1

Stack Overflow用户

发布于 2021-12-30 00:41:48

有一种方法可以非常接近您最初想要的内容,尽管代码看起来很难看:

代码语言:javascript
复制
digraph G {

    // Defaults
    node [fontname="Arial", width=1.2, height=0.6, style="filled", fillcolor="#C2CEFF"]
    edge [fontname="Arial"]

    // Nodes
    User [fillcolor="#FFD2CD"]
    Kernel [fillcolor="#FFD2CD"]
    Runnable
    Swapping
    Disk
    Sleep
    Lock
    Idle

    // Comment 1
    User -> Kernel [label="running\n(on-CPU)", color="#FFFFFF00"]

    // Edges
    User -> Kernel [dir=both, label="  mode\n  switch", weight=10]
    Runnable -> Swapping [label="swap out"]
    Swapping -> Runnable [label="\nswap in"]
    Kernel -> Runnable [label="preemption or\ntime quantum expired", minlen=6]
    Runnable -> Kernel [label="\nschedule"]

    // Defaults for grid nodes
    node [shape="point", width=0.005, height=0.005, color="#000000"]

    // Grid nodes
    cn10 -> Disk [label="disk I/O"]
    cn11 -> Sleep [label="network I/O\nsleep"]
    cn12 -> Lock [label="block"]
    cn13 -> Idle [label="wait\nfor work"]
    cn10 -> cn11 -> cn12 -> cn13 [weight=10, dir=none]
    edge [dir=none]
    Disk -> cn20 [label="wakeup"]
    Sleep -> cn21 [label="wakeup"]
    Lock -> cn22 [label="wakeup"]
    Idle -> cn23 [label="work\narrives"]
    cn23 -> cn22 -> cn21 -> cn20 [weight=10, dir=none]

    // Connect grid nodes to the parent nodes
    Kernel -> cn10 [weight=10, dir=none]
    cn20 -> Runnable [weight=10, dir=forward]

    // Align center nodes
    Disk -> Sleep -> Lock -> Idle [style="invis"]

    // Comment 2
    Kernel -> cn13 [label="off-CPU", color="#FFFFFF00"]

    // Ranking
    rank = same { Kernel Runnable Swapping }
    rank = same { cn10 Disk cn20 }
    rank = same { cn11 Sleep cn21 }
    rank = same { cn12 Lock cn22 }
    rank = same { cn13 Idle cn23 }
}

编辑视图

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70365515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档