前言
日常開發或者編寫課程論文時,除了代碼文檔的編寫,其中一個很重要的部分就是需要繪制流程圖、示意圖
繪制流程圖有很多工具,一般常見的就有如下幾種:
- Word、PPT等辦公軟件
- Viso以及開源的Dia
- 畫圖(MSPaint)、PS、AI
- PicPicke
- 在線流程圖繪制(eg. www.processon.com)
對於這些軟件無論功能強大與否,適合與否,方便與否,都具有一個特點——所見即所得。你制作過程中看到的就是最終得到的結果。圖中形式、布局在制作過程中都由自己設置,其實還有一類繪圖系統的存在,其思想是——所思即所得。其中具有代表性的軟件就是——Graphviz。Graphviz是貝爾實驗室開發的一個開源的工具包,它使用一個特定的DSL(領域特定語言)——Dot作為腳本語言,然后使用布局引擎解析腳本並完成自動布局。Graphviz的設計初衷是對圖進行自動布局(有向圖、無向圖、),可以使用dot腳本來定義圖形元素,選擇一定的算法進行布局,通過對輸入腳本的解析,分析出其中的點,邊以及子圖,然后根據屬性進行繪制,繼而將結果以自己需要的格式導出來。
相對於其他的繪圖軟件,Granphviz的特點有如下幾個方面:
- 代碼控制,所思即所得
- 布局引擎自動布局
- (導出格式非常豐富)
如下即為Graphivz官網上的一些示例效果:
一個生成有向圖的小例子
我們先來看一個小例子來看一下使用Graphviz繪制一張圖的完整流程(我使用的是Ubuntu 14.04 LTS,在其它系統上的使用應該差不多,下面不再標注了)。
要使用Graphviz,先要在系統上安裝Graphviz。在Ubuntu上可以使用命令sudo apt-get install graphviz
進行安裝,在其他系統安裝的方法可以查看Graphviz官網進行查看。程序安裝好之后我們就可已使用了。
Step 1:首先,需要編輯dot腳本
可以使用你熟悉的純文本編輯器進行腳本編寫(必須是純文本編輯器,如vim、notepad++,像word這樣的富文本編輯器是不行的),只需設置編碼為UTF-8。
編輯下面的腳本代碼,保存為test.dot
(先不用管其具體的意思,直接復制就行了):
digraph G{
main -> parse -> execute;
main -> init;
main -> cleanup;
execute -> make_string;
execute -> printf;
init -> make_string;
main -> printf;
execute -> compare;
}
Step 2:隨后,選用布局生成結果
使用如下命令生成結果:
dot -Tpng sample.dot -o sample.png
對於這條命令,dot
表示用dot布局,-Tpng
表示生成png圖片格式,sample.dot
是腳本文件名,-o sample.png
表示生成輸出的圖片名稱。
改命令也可以寫成dot -Kdot -Tpng sample.dot -o sample.png
,其中-Kdot
表示使用dot布局。
Graphviz支持幾種布局引擎:
- dot : 默認布局方式,主要用於有向圖
- neato : 主要用於無向圖
- twopi : 主要用於徑向布局
- circo : 圓環布局
- fdp : 主要用於無向圖
- sfdp : 主要繪制較大的無向圖
- patchwork : 主要用於樹哈希圖(tree map)
Graphviz支持的輸出圖片格式更是相當的多,常用的有以下幾種:
- pdf :
- gif
- png :
- jpeg : 一種有損壓縮圖片格式
- bmp : 一種位圖格式
- svg : 矢量圖,一般用與Web,,可以用瀏覽器打開
- ps : 矢量線圖,多用於打印
更多的輸出格式可以瀏覽Graphviz輸出格式進行查看。
Step 3:查看生成結果
輸出的圖片,可以用支持相應圖片格式的軟件打開。Graphviz軟件安裝好之后,有一個圖片瀏覽器可以進行圖片預覽,只需輸入命令display sample.png
即可(sample.png為生成的圖片文件名),該示例預覽結果如下(你可以在上一步使用不同的布局方式,查看一下結果有什么不同):
正確完成三個步驟得到結果說明Graphviz已經可以在你的系統中正確安裝可以使用了。后續我會介紹Graphviz Dot腳本的具體編寫方法。