在GraphViz中制作图例/键

我想在我的GraphViz图中包含一个图例或密钥。 不过,我很难搞清楚要使用什么代码。 我也想把它放在一个angular落里,但我知道的唯一的坐标是左下angular: pos="10,10!"

有谁知道我怎么能得到这个工作?

 digraph { rankdir=LR node [shape=plaintext] subgraph cluster_01 { label = "Legend"; key [label=<<table border="0" cellpadding="2" cellspacing="0" cellborder="0"> <tr><td align="right" port="i1">item 1</td></tr> <tr><td align="right" port="i2">item 2</td></tr> <tr><td align="right" port="i3">item 3</td></tr> <tr><td align="right" port="i4">item 4</td></tr> </table>>] key2 [label=<<table border="0" cellpadding="2" cellspacing="0" cellborder="0"> <tr><td port="i1">&nbsp;</td></tr> <tr><td port="i2">&nbsp;</td></tr> <tr><td port="i3">&nbsp;</td></tr> <tr><td port="i4">&nbsp;</td></tr> </table>>] key:i1:e -> key2:i1:w [style=dashed] key:i2:e -> key2:i2:w [color=gray] key:i3:e -> key2:i3:w [color=peachpuff3] key:i4:e -> key2:i4:w [color=turquoise4, style=dotted] } ... 

在这里输入图像说明

我用dot

我深信graphviz不应该以这种方式使用,但是你可以使用HTML标签来实现你想要的:

 digraph { Foo -> Bar -> Test; Foo -> Baz -> Test; { rank = sink; Legend [shape=none, margin=0, label=< <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4"> <TR> <TD COLSPAN="2"><B>Legend</B></TD> </TR> <TR> <TD>Foo</TD> <TD><FONT COLOR="red">Foo</FONT></TD> </TR> <TR> <TD>Bar</TD> <TD BGCOLOR="RED"></TD> </TR> <TR> <TD>Baz</TD> <TD BGCOLOR="BLUE"></TD> </TR> <TR> <TD>Test</TD> <TD><IMG src="so.png" SCALE="False" /></TD> </TR> <TR> <TD>Test</TD> <TD CELLPADDING="4"> <TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0"> <TR> <TD BGCOLOR="Yellow"></TD> </TR> </TABLE> </TD> </TR> </TABLE> >]; } } 

这是这样的:

graphviz输出

Legend的定位必须像其他任何节点一样完成(我使用rank = sink来得到它) – 你可以使用margin属性来调整位置。

编辑

没有使用标签,这可能是一个方向 – 我不确定是否要完全消除ranksep

 digraph { mindist=0; ranksep=0; nodesep=0; node[shape=box,margin="0,0",width=1, height=0.5]; edge [style=invis]; Legend[width=2]; Legend -> Foo; Legend -> FooValue; Foo -> Bar; FooValue -> BarValue Bar -> Baz; BarValue -> BazValue; edge [constraint=false]; Foo -> FooValue; Bar -> BarValue Baz -> BazValue; } 

导致:

在这里输入图像说明

如果使用graph [splines=ortho]则会出现一些问题:线条的顺序相反。

点源:

 digraph { rankdir=LR node [shape=plaintext] graph [splines=ortho] subgraph cluster_01 { label = "Legend"; key [label=<<table border="0" cellpadding="2" cellspacing="0" cellborder="0"> <tr><td align="right" port="i1">item 1</td></tr> <tr><td align="right" port="i2">item 2</td></tr> <tr><td align="right" port="i3">item 3</td></tr> <tr><td align="right" port="i4">item 4</td></tr> <tr><td align="right" port="i5">item 5</td></tr> </table>>] key2 [label=<<table border="0" cellpadding="2" cellspacing="0" cellborder="0"> <tr><td port="i1" bgcolor='greenyellow'>&nbsp;</td></tr> <tr><td port="i2">&nbsp;</td></tr> <tr><td port="i3">&nbsp;</td></tr> <tr><td port="i4">&nbsp;</td></tr> <tr><td port="i5">&nbsp;</td></tr> </table>>] key:i1:e -> key2:i1:w [color=red] key:i2:e -> key2:i2:w [color=gray] key:i3:e -> key2:i3:w [color=peachpuff3] key:i4:e -> key2:i4:w [color=turquoise4, style=dotted] key:i5:e -> key2:i5:w [color=red, style=dotted] } }