使用Graphviz繪圖(一)



前言

日常開發或者編寫課程論文時,除了代碼文檔的編寫,其中一個很重要的部分就是需要繪制流程圖、示意圖

繪制流程圖有很多工具,一般常見的就有如下幾種:

  • 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腳本的具體編寫方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM