我试图在GraphViz中绘制一个广泛的表格游戏。编译代码会生成一张在所有方面都正确的图形,唯一一种图形是正确的。我希望将“战争”标签放置在它所标记的边缘的左侧,以使边缘最接近“ r”而不是“ W”。
到目前为止,这是我的“游戏”或图表:
digraph hierarchy_of_D {
graph [rankdir ="UD"]
node [color=black,shape=circle]
//splines="polyline"
I [label="R"]
subgraph infoset1
{
label="whatever"
rank="same"
1 [label="C"]
2 [label="C"]
}
I -> 1 [label="War"] //fix how this floats right of the line
I -> 2 [label="Peace"]
1 -> 2 [style=dashed, dir=none]
subgraph info21
{
rank="same"
3 [label="(2,2)", rank=sink, shape="plaintext"]
4 [label="(5,1)", rank=sink, shape="plaintext"]
5 [label="(1,5)", rank=sink, shape="plaintext"]
6 [label="(4,4)", rank=sink, shape="plaintext"]
}
1 -> 3 [label="War"]
1 -> 4 [label="Peace"]
2 -> 5 [label="War"]
2 -> 6 [label="Peace"]
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我已经尝试了以下方法,但并没有达到我想要的效果:
1 -> 3 [label="War/l"]
Run Code Online (Sandbox Code Playgroud)
三分?那么,正确的答案是您不能选择边缘标签的位置。
但是,你可能会玩headlabel,labeldirection和labelangle:
digraph hierarchy_of_D {
node [color=black,shape=circle]
I [label="R"]
subgraph infoset1
{
label="whatever"
rank="same"
1 [label="C"]
2 [label="C"]
}
I -> 1 [headlabel="War", labeldistance=3, labelangle=40]
I -> 2 [headlabel="Peace", labeldistance=3, labelangle=-40]
1 -> 2 [style=dashed, dir=none]
subgraph info21
{
rank="same"
3 [label="(2,2)", rank=sink, shape="plaintext"]
4 [label="(5,1)", rank=sink, shape="plaintext"]
5 [label="(1,5)", rank=sink, shape="plaintext"]
6 [label="(4,4)", rank=sink, shape="plaintext"]
}
1 -> 3 [headlabel="War", labeldistance=3, labelangle=40]
1 -> 4 [headlabel="Peace", labeldistance=3, labelangle=-40]
2 -> 5 [headlabel="War", labeldistance=3, labelangle=40]
2 -> 6 [headlabel="Peace", labeldistance=3, labelangle=-40]
}
Run Code Online (Sandbox Code Playgroud)
输出:

只是为了好玩,我刚刚发现了另一种解决方法:
通过splines=false两次使用和定义边在节点之间强制直边,这些边被绘制为好像它们是一个单一的边,但每条边的标签(大部分时间)都被绘制在边的不同侧。
因此,通过让一个边缘没有标签而另一个边缘带有标签,可以影响边缘标签的放置。
你的例子:
digraph hierarchy_of_D {
splines=false;
node [color=black,shape=circle]
I [label="R"]
subgraph infoset1
{
rank="same"
1 [label="C"]
2 [label="C"]
}
I -> 1 [label="War "]
I -> 1 [label=" "]
I -> 2 [label=""]
I -> 2 [label="Peace"]
1 -> 2 [style=dashed, dir=none]
subgraph info21
{
rank="same"
3 [label="(2,2)", rank=sink, shape="plaintext"]
4 [label="(5,1)", rank=sink, shape="plaintext"]
5 [label="(1,5)", rank=sink, shape="plaintext"]
6 [label="(4,4)", rank=sink, shape="plaintext"]
}
1 -> 3 [label="War"]
1 -> 3 [label=""]
1 -> 4 [label=""]
1 -> 4 [label="Peace"]
2 -> 5 [label=""]
2 -> 5 [label="War "]
2 -> 6 [label=""]
2 -> 6 [label="Peace"]}
Run Code Online (Sandbox Code Playgroud)
和输出:

它并不完美,您的里程可能因图表而异,但我认为值得一提。