在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"> </td></tr> <tr><td port="i2"> </td></tr> <tr><td port="i3"> </td></tr> <tr><td port="i4"> </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> >]; } }
这是这样的:
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'> </td></tr> <tr><td port="i2"> </td></tr> <tr><td port="i3"> </td></tr> <tr><td port="i4"> </td></tr> <tr><td port="i5"> </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] } }