gpt4 book ai didi

graph - 收紧点图使其更对称

转载 作者:行者123 更新时间:2023-12-04 04:13:21 27 4
gpt4 key购买 nike

我编译了下图:dot graph.dot -Tpdf -ograph.pdf ,产生:

enter image description here

结果没问题,但状态转换看起来很像意大利面条怪物,我不知道我能做些什么来解决这个问题。我尝试了其他布局:twopi, neato, etc.是否有允许它强制图形看起来更对称的参数?因为整体画面还可以。

对我来说,边缘似乎使用了最小的可用空间来构建边缘描述,也许这就是问题所在?

我的图形设计有缺陷吗?我应该在一个边缘上写不同的状态转换,使用\n 来分隔不同的转换吗?

digraph finite_state_machine {
rankdir=LR;
edge [fontsize=26];
node [shape = doublecircle, width=2.0, fontsize=24, fixedsize=true,style=filled, colorscheme=spectral5]; New [fillcolor=3] Terminated [fillcolor=5];
node [shape = circle, width=2.0, fontsize=24, fixedsize=true, colorscheme=spectral5]; Runnable [fillcolor=4] Waiting [fillcolor=2] "Timed\nWaiting" [fillcolor=2] Blocked [fillcolor=1];
New -> Runnable [ label = "Thread.start" ];
Runnable -> Waiting [ label = "Object.wait" ];
Runnable -> Waiting [ label = "Thread.sleep" ];
Runnable -> Waiting [ label = "LockSupport.park" ];
Waiting -> Blocked [ label = "Reacquire monitor lock after\nleaving Object.wait" ]
Waiting -> Blocked [label = "Spurious wake-up"]
"Timed\nWaiting" -> Blocked [ label = "Reaquire monitor lock after\n leaving Object.wait" ]
"Timed\nWaiting" -> Terminated [ label = "Exception" ]
"Timed\nWaiting" -> Blocked [ label = "Spurious wake-up" ]
Runnable -> "Timed\nWaiting" [ label = "Object.wait" ];
Runnable -> Blocked [ label = "Contended Monitor\nEnter" ];
Blocked -> Runnable [ label = "Contended Monitor\nEntered" ];
Runnable -> Terminated [ label = "Thread finishes\nexecution" ]
Runnable -> Terminated [ label = "Exception" ]
Waiting -> Runnable [ label = "Object.notify\nObject.notifyAll" ]
Waiting -> Terminated [ label = "Exception" ]
"Timed\nWaiting" -> Runnable [ label = "Object.notify\nObject.notifyAll" ]
}

最佳答案

我不认为你的设计有缺陷,我认为还可以。点语法是可读的,因此是可维护的,其结果是自动生成的图形通常看起来很相似。

当然,您可以添加小的更正以使此特定图形更好(或至少不同)。例如,如果您的图形的源是由应用程序生成的,那么其中一些可能难以实现。这里有一些想法:

使布局为 更对称 ,您可以尝试通过设置节点 group 来对齐节点 Waiting 和 Terminated 以及 Timed Waiting 和 Blocked。属性相同的值( group=agroup=b )。

grouped nodes

它适用于等待和终止,但对于定时等待和阻塞则不太好 - 可能是因为这些节点之间有两条边。

您可以尝试通过选择连接它们的边之一并设置其 weight 来拉直它们。归因于高值(value)。

除此之外,我认为该图总体上看起来更好,因为边缘更平滑并且不必要的曲线更少,尤其是 - 但不仅如此 - 在 Runnable 和 Waiting 之间。

意大利面效果是由于样条线 - 也许没有样条线看起来不那么意大利面?我尝试添加 splines=compoundsplines=ortho (相同的结果):

group and compound

该图使用略少的垂直空间。这不是意大利面,但在我看来并没有更好......

您也可以试试 splines=compound没有组属性,这应该使图形更紧凑(错误不一定更漂亮)。或者简单地利用边缘的重量来理顺特别令人不快的边缘。

在某些情况下, concentrate 可以清除具有大量平行边的图形 - 在这种情况下,它并没有真正的帮助。

关于graph - 收紧点图使其更对称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6714068/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com