我正在尝试使用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"]
}
Run Code Online (Sandbox Code Playgroud)
运行以下命令:
neato -Tpng Chord_NFA.dot > Chord_NFA.png
给我这个输出:
我希望它适合A4并且没有任何边缘重叠或交叉节点.这是可能的(数学上),因为我自己用biro做了.
mar*_*pet 37
以下是更好方向的一些步骤:
nodesep
不是节点属性 - 它可能不会按预期执行.但它仍然适用于您的情况:
...这会影响单个节点上的循环之间的间距,或者影响一对节点之间的多边距.
sep
overlap
有更多的值而不是真/假 - 我经常觉得scalexy
有用.headlabel
/ taillabel
,labeldistance
和labelangle
(红在下面的例子中,使他们脱颖而出).这是修改过的样本:
digraph n {
splines=true;
sep="+25,25";
overlap=scalexy;
nodesep=0.6;
node [fontsize=11];
//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 [headlabel="V/2", labeldistance=4, labelangle=-10, labelfontcolor=red]
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 [headlabel="V/3", labeldistance=8, labelangle=-7, labelfontcolor=red]
F -> B [label="I/4"]
F -> B [label="vi/1"]
F -> B [label="*/0"]
G -> B [taillabel="I/5", labeldistance=4, labelangle=15, labelfontcolor=red]
H -> B [label="vi/1"]
}
Run Code Online (Sandbox Code Playgroud)
Vic*_*usa 27
我玩了几个,得到了这个:
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"];
}
Run Code Online (Sandbox Code Playgroud)
编译:
dot -Tpng -o Chord_NFA.png Chord_NFA.gv
Run Code Online (Sandbox Code Playgroud)
输出就是这样,没有任何线路交叉:
诀窍是:
要添加minlen属性以强制某些分隔,为渲染提供更多间距而不会出现重叠和交叉.
反转某些边缘的逻辑(用dir = back渲染它们不反转).这样,dot总是看到一个非循环图,可以排序边缘而不会混淆.
首先关注一些子图并将其节点分组,以便在渲染图的其余部分时为其提供一些"保护".
归档时间: |
|
查看次数: |
24078 次 |
最近记录: |