Graphviz 是一款開源的,免費的圖結構的視覺化軟體,只需要描述清楚圖中的頂點,邊的資訊,Graphviz 可以自動化的對圖進行佈局,生成對應的圖片;
Graphviz 採用DOT 的這種語言來描述圖中的資訊;
對於圖這種資料結構來說,分為有向圖和無向圖,本質就是圖中兩個節點之間的關係有沒有方向,針對不同型別的圖結構,Graphviz 提供了不同的工具來實現自動化的佈局
dot 針對有向圖,採用從上到下的佈局方式進行視覺化,測試官方文件中的幾個例子:
1) 第一個例子
digraph G { main -> parse -> execute; main -> init; main -> cleanup; execute -> make_string; execute -> printf init -> make_string; main -> printf; execute -> compare; }
執行命令:
dot -T pdf test.dot -o test.pdf
生成的圖片為
Graphviz 支援多種輸出格式,包括png, pdf, svg, gif, postscript;
dot 原始碼中的digraph 代表 directerd graph , 表示有向圖;G 是圖的名字;大括號內描述圖中的節點和邊的資訊;
在這個例子中只是簡單的描述了邊的資訊,不設定任何的屬性,預設輸出的格式就和上圖一致;
2) 第二個例子
digraph G { size ="4,4"; main [shape=box]; /* this is a comment */ main -> parse [weight=8]; parse -> execute; main -> init [style=dotted]; main -> cleanup; execute -> { make_string; printf} init -> make_string; edge [color=red]; // so is this main -> printf [style=bold,label="100 times"]; make_string [label="make a\nstring"]; node [shape=box,style=filled,color=".7 .3 1.0"]; execute -> compare; }
生成的圖片為
在這個例子中,對圖中的節點和邊的屬性進行了一些設定,設定屬性時的寫法為[key = value];
對於節點來說,常用的屬性有
label : 文字註解,節點上顯示的名字,預設使用節點定義時的文字,有label 屬性時就採用label 屬性設定的值
shape : 形狀,預設為 ellipse(橢圓),可選的值有 box(方框),circle (圓), record(和方框相似), plaintext (不顯示邊框,只顯示文字), polygon (多邊形)
weight : 設定邊框的寬度
height : 設定邊框的長度
sides : 邊的數目,對於多邊形來說,邊的條數控制了形狀,3條邊為三角形,4條邊為矩形或者梯形,除了record 之外的形狀都被視為多邊形,可以設定sides
color : 顏色
style : 風格,預設採用的是隻有外邊框,還可以設定成style = filled, 這是就可以通過color 屬性新增填充色
peripheries : 設定邊框繪製的次數,預設為1次
對於邊來說,常見的屬性有
style : 連線的型別,預設為實線,可選的值有dotted (點構成的虛線), bold(加粗的實線),
label : 連線的文字說明,在邊上會有顯示對應的文字
color : 連線的顏色
除了對每個節點和每條邊單獨設定屬性外,還可以對所有的點和邊進行全域性設定
node[shape=box]
edge[color=red]
在這兩行設定的後面的節點會繼承這些屬性,如果把這兩行放在開頭,就可以進行全域性的設定