gpt4 book ai didi

graphviz - Graphviz输出困惑

转载 作者:行者123 更新时间:2023-12-03 09:15:32 26 4
gpt4 key购买 nike

我正在尝试使用GraphViz以点格式显示以下数据:

digraph n {
node [nodesep=2.0, fontsize=11];
graph [ overlap=false];
edge[weight=0.2];
A -> B [label="I/5"]
A -> A [label="*/0"]
A -> C [label="ii/2"]
A -> H [label="vii/1"]
B -> D [label="iii/1"]
B -> E [label="IV/2"]
B -> F [label="V/2"]
B -> B [label="vi/2"]
C -> F [label="V/2"]
C -> H [label="vii/1"]
D -> E [label="IV/2"]
E -> D [label="iii/2"]
E -> G [label="iv/1"]
E -> F [label="V/3"]
F -> B [label="I/4"]
F -> B [label="vi/1"]
F -> B [label="*/0"]
G -> B [label="I/5"]
H -> B [label="vi/1"]
}

运行以下命令: neato -Tpng Chord_NFA.dot > Chord_NFA.png
给我这个输出:

我希望它适合A4,并且没有任何边缘可以重叠或跨越节点。这是有可能的(数学上的),因为我自己是用biro做的。

最佳答案

我玩了一些,得到了:

digraph n {
node [nodesep=2.0, fontsize=11];
graph [overlap = false];
subgraph cluster_a {
style=invisible;
A; B; H;
}
subgraph cluster_b {
style=invisible;
D; E; G;
}
subgraph cluster_c {
style=invisible;
C; F;
}
A -> B [label="I/5"];
A -> A [label="*/0"];
A -> C [label="ii/2"];
A -> H [label="vii/1"];
B:w -> D [label="iii/1"];
B:nw -> E [minlen=3 label="IV/2"];
B -> F [minlen=2 label="V/2"];
B -> B [label="vi/2"];
C -> F [minlen=2 label="V/2"];
C -> H [label="vii/1"];
D -> E [label="IV/2"];
D -> E [minlen=2 dir=back label="iii/2"];
G -> E [minlen=2 dir=back label="iv/1"];
F -> E [dir=back label="V/3"];
B -> F [minlen=2 dir=back label="I/4"];
B -> F [minlen=2 dir=back label="vi/1"];
B -> F [minlen=2 dir=back label="*/0"];
B -> G [dir=back label="I/5"];
H -> B [label="vi/1"];
}

编译:
dot -Tpng -o Chord_NFA.png Chord_NFA.gv

输出是这样,没有任何线交叉:

诀窍是:
  • 添加minlen属性以强制分离,从而为渲染提供更多间距,而不会出现重叠和交叉。
  • 反转某些边的逻辑(通过dir = back使其未反转)。这样,点始终会看到非循环图,并且可以对边缘进行排序而不会引起混淆。
  • 首先关注一些子图,然后将它们的节点分组,以在渲染图的其余部分时为它们提供“保护”以防干扰。
  • 关于graphviz - Graphviz输出困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10438895/

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