版權聲明:本文爲 西風逍遙遊 原創文章,轉載請註明出處 西風世界 http://blog.csdn.net/xfxyy_sxfancy
引言
以前我在寫博客的時候,最發愁的就是畫圖,尤其是一些數據結構的展示,或一些算法的圖示。一般我是用手繪板,軟件就用MyPaint,做出圖後,往往調整和修改十分困難。
Graphviz的強大
但自從我得知的Graphviz這款神器後,我便不再擔心圖形的繪製困難了。因爲,這是一款腳本化的繪圖工具,先用文本描述結構內容,再由計算機自動生成圖片,方便快捷,比手繪精度又高,而且還容易修改。
Graphviz誕生於大名鼎鼎的貝爾實驗室,最早是一款圖自動佈局工具,但其提供的dot腳本,對於結構化圖形描述十分便捷,只需要編寫對圖形的描述,便可以自動生成合理佈局的圖片,非常方便。
示例
例如下面這是一幅有限狀態機圖:
digraph finite_state_machine {
rankdir=LR;
size="8,5"
node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
node [shape = circle];
LR_0 -> LR_2 [ label = "SS(B)" ];
LR_0 -> LR_1 [ label = "SS(S)" ];
LR_1 -> LR_3 [ label = "S($end)" ];
LR_2 -> LR_6 [ label = "SS(b)" ];
LR_2 -> LR_5 [ label = "SS(a)" ];
LR_2 -> LR_4 [ label = "S(A)" ];
LR_5 -> LR_7 [ label = "S(b)" ];
LR_5 -> LR_5 [ label = "S(a)" ];
LR_6 -> LR_6 [ label = "S(b)" ];
LR_6 -> LR_5 [ label = "S(a)" ];
LR_7 -> LR_8 [ label = "S(b)" ];
LR_7 -> LR_5 [ label = "S(a)" ];
LR_8 -> LR_6 [ label = "S(b)" ];
LR_8 -> LR_5 [ label = "S(a)" ];
}
在安裝好graphviz後,我們將其保存成fsm.gv,然後執行指令:
dot ./fsm.gv -Tjpg -o fsm.jpg
這樣就可以生成圖片了,如下圖:
自動佈局
dot是其中的一種很常見的佈局方式,表示的是層次佈局法,下面就依次介紹幾種常見的:
dot - 層級佈局,分層繪製,對於有向圖十分適合
neato - 基於力的佈局,適合無向圖,節點間相互關係並不緊密,也沒有規定的起點或終點的
circo - 環狀佈局
怎麼樣,官網上還有更多示例,可供參考:http://www.graphviz.org/Gallery.php
附:安裝方法
Ubuntu很簡單,直接就可以了:
sudo apt-get install graphviz
Windows下應該去官網下載其安裝包:http://www.graphviz.org/Download.php