1. 程式人生 > 其它 >零基礎學程式設計029:程式設計師作圖不用筆

零基礎學程式設計029:程式設計師作圖不用筆

現在寫專業文章離不開圖,有些圖非常複雜但非常有規律,用PowerPoint或Visio畫都很吃力,這時候會程式設計就輕鬆多了,比如下面這張狀態轉換圖:

再比如這張資料結構圖:

再比如英文小說《欺騙的女兒》中的人物關係圖:

再比如這張超複雜的網路結點圖:

有些圖看起來簡單,可能用PowerPoint畫也費不了多少時間,但如果這種圖需要頻繁調整,那工作量可就大了去了。比如程式設計師經常畫的流程圖、類圖、資料結構圖等,公司裡經常畫的組織結構圖、工作流圖等。

對於這類非常有規律的圖,還有一個強大的工具,它就是GraphViz。上面舉的幾個例圖都是摘自它的官網:http://www.graphviz.org。這個GraphViz不僅僅是一個工具,而且還對應了一種畫圖的語言,稱為DOT Language

安裝與執行

到官網上點選Download連結,可以看到各種平臺的下載安裝包,支援Linux、Windows、Mac,我下載的是Windows平臺的graphviz-2.38.msi安裝包,安裝過程一路預設下一步即可。完成之後,從開始選單中找到gvedit.exe,執行它出現主介面。

Hello World

任何語言都有個Hello World,DOT Language也不例外。從File選單中點選New,會新建一個子視窗,名稱為graph1.gv,所有GraphViz的檔案的副檔名都為.gv,剛才的gvEdit.exe的意思也明白了吧?

在文字編輯視窗中輸入以下程式碼:

digraph G {
    hello -> world
}

再點選Graph選單中的Layout,或者直接按F5鍵,彈出一個View視窗,一張簡單的圖就畫出來了。

簡單解釋一下:

  • digraph表示有向圖,是Directed Graph的縮寫形式,什麼是有向圖?請參考《圖論》
  • G是圖的名稱
  • 花括號{ }內是圖形的描述語句
  • hello 和 world是兩個節點node
  • -> 表示左邊指向右邊的一個邊edge

類與物件圖

在《零基礎學程式設計028:面向物件程式設計OOP》裡我畫了一張圖,實際上就是用GraphViz生成的。

圖並不複雜,直接看程式碼:

digraph G {
    node[shape=box]
    Stock[style=filled]
    Stock -> {google; amazon; facebook; apple}
}

花括號內的程式碼就三行,記得按F5看看執行效果,解釋一下:

  • node[ ... ]表示對圖中的所有結點統一進行設定
  • [ ] 中設定一些屬性,稱為attr
  • shape=box把結點設定為矩形
  • Stock是結點的名稱,由於前面已經設定了shape=box,所以也為矩形
  • stype=filled,填充的矩形
  • Stock -> {google; amazon; facebook; apple}相當於以下四句 Stock -> google Stock -> amazon Stock -> facebook Stock -> apple

小結:

  • GraphViz的語法挺簡單,裡面主要是結點node邊edge
  • -> 表示一條有向邊
  • 最複雜的是Attr,裡面可以設定填充、排列、顏色、連結等等,詳細內容以後再說,也可以參考官網的Documentation連結,長達N頁的全英文詳細說明,點選“閱讀原文”慢慢看吧

--- END ---