2011-09-24 57 views
7

我想創建一個如下所示的圖表......但方式太複雜。我想爲每個方形節點使用不同的圖像,並且爲每個圓形節點使用相同的圖像。Graphviz是這種圖形的最佳工具嗎?

我想知道使用GraphViz是最佳選擇還是有其他選擇?

另外,我想知道如果我可以在GraphViz中爲圓圈創建一個模板節點並重用它?我不想一次又一次地指定圖像,形狀等屬性。

Sample Graph

回答

8

Graphviz的是絕對適合你的要求。主要的graphviz.org網站目前似乎已經停止運行,但有人已經很好地將這些圖片庫的例子(來源)反映到Flickr上。

http://www.flickr.com/photos/kentbye/sets/72157601523153827/

據我所知,你不能創建的「模板」,但可以爲界做這樣的事情:

node[shape=circle, color=white, style=solid]; 
node1;node2;node3; 

這將定義一個節點(認爲它作爲逐行評估文件時的「狀態」),然後在切換到矩形之前,可以在該「狀態」中定義您的圓形節點。

根據您的平臺,您可能還可以導入.dot文件並對其進行微調以便發佈。該格式還有大量的發生器和轉換器。

請注意,如果您正在使用Mac OS X 10.7「Lion」,我還無法找到或構建Graphviz的工作版本。在這種情況下,我會說它不適合你的需求。

12

當然,下面是在你的問題中繪製圖形的代碼(以下用點表示)。

digraph g { 
rankdir = TB; 
bgcolor = white; 

edge[arrowsize=.7, color=black]; 
node[shape=box, color=black] 

{rank=same; a, b, c}; 
{rank=same; d, e, f}; 
{rank=same; g, h}; 
{rank=same; i, j, k}; 

d[color=blue; shape=circle]; 
e[color=blue; shape=circle]; 
k[color=blue; shape=circle]; 

a -> d; 
b -> d; 
b -> e; 
c -> e; 
d -> g; 
e -> h; 
d -> i; 
d -> j; 
j -> k; 
h -> k; 
k -> f; 
} 


  1. 第一行有向圖向圖(爲圖表在 ,其邊緣具有的方向)。

  2. 第四個和第五個分別位於邊緣和 節點的默認屬性上方。換句話說,一旦你完成了這一步,你只需要樣式(包括屬性+值)的節點(或邊),你想要的樣式與默認值不同。通過創建子圖或分立的 組節點(請參閱點手冊),可以使多個節點「模板」具有多個節點「 」。

  3. 秩=相同允許你specifiy一組具有相同的 垂直位置節點(提供rankdir設置爲TB,這意味着 「頂部 - 底部」)。

  4. 默認情況下,節點名稱(例如,我的圖中的a,b,c)用作 節點的標籤。如果你不希望這樣的渲染圖所示做, 剛剛成立標籤= 「」

enter image description here