結構化圖形繪製利器Graphviz

版權聲明:本文爲 西風逍遙遊 原創文章,轉載請註明出處 西風世界 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

發佈了84 篇原創文章 · 獲贊 52 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章