2010-08-17 154 views
49

我想在我的GraphViz關係圖中包含圖例或關鍵字。不過,我無法弄清楚要使用哪些代碼。我也想把它放在一個角落,但我知道的唯一的座標是左下角:pos="10,10!"在GraphViz中製作圖例/關鍵字

有誰知道我該如何獲得這個工作?

回答

23

我深信,graphviz的不應該用這樣的方式,但也可以使用HTML labels達到你想要的東西:

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 output

定位的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; 
} 

,導致:

enter image description here

+0

這看起來在佈局方面不錯,但它需要手動輸入表中的每個項目,而不是使用現有的節點對象。我試圖嘗試子圖和集羣,但都不足以控制表格的佈局(我明白引擎負責決定正常圖形的最佳佈局,但是表格很容易佈局爲最佳,而且沒有花哨的計算應該是必需的;矩形很簡單)。 – Synetech 2011-01-21 18:00:42

+1

我並不知道圖例必須由節點組成 - 我更新了一個朝着這個方向的例子,但沒有成功,至少如果你需要網格線的話。我不認爲你想要獲得什麼是可能的,即使是花哨的計算。其他工具可能更適合該任務。 – marapet 2011-01-25 21:37:21

+2

**>我不知道圖例必須由節點組成**圖例是關於圖的,圖由節點和線組成。 **>我不認爲你想獲得什麼是可能的,即使是花哨的計算。其他工具可能更適合這項任務。**這將是不幸的;圖形工具不能提供圖形的關鍵部分似乎很奇怪。 :( – Synetech 2011-01-27 02:25:50

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

enter image description here

我用dot

+2

奇怪;我得到了[這個](http://i.stack.imgur.com/jztgt。PNG)(其他更糟糕)。 – Synetech 2013-03-30 14:42:42

+0

@Synetech,我使用GraphViz 2.28(如果有的話)。看起來奇怪的是'key2'出現在你的圖中。 – 2013-03-30 14:55:50

+0

它可能;我正在使用2.26.3。我會嘗試最新版本。 – Synetech 2013-03-31 00:13:58

1

如果您使用圖[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] 
    } 
}