Graphviz 對網狀結構進行視覺化

weixin_34321977發表於2017-03-15

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]

在這兩行設定的後面的節點會繼承這些屬性,如果把這兩行放在開頭,就可以進行全域性的設定

相關文章