4

我正在尝试在 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"]

    } 

有任何想法吗?我已经尝试过以下方法,但它不能满足我的要求:

1 -> 3 [label="War/l"]

另请参阅这个问题那个问题,两者都没有答案。来吧,这值得三分!

4

2 回答 2

5

三分?那么,正确的答案是你不能选择边缘标签的位置。

但是,您可以使用headlabel,labeldirectionlabelangle

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]
} 

输出:

图形输出

于 2011-01-08T20:55:32.990 回答
5

只是为了好玩,我刚刚发现的另一种解决方法:

通过使用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"]} 

和输出:

图形输出

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

于 2011-01-13T00:15:23.477 回答