Python對Graphviz的封裝:PyGraphviz
PyGraphviz是Graphviz圖形布局和可視化軟件包的一個Python接口。利用PyGraphviz您可以創建,編輯,讀,寫和繪制圖形,并使用Python來訪問Graphviz圖形數據結構和布局算法。
graphviz是貝爾實驗室開發的一個開源的工具包,它使用一個特定的DSL(領域特定語言):dot作為腳本語言,然后使用布局引擎來解析此腳本,并完成自動布局。graphviz提供豐富的導出格式,如常用的圖片格式,SVG,PDF格式等。
graphviz中包含了眾多的布局器:
- dot 默認布局方式,主要用于有向圖
- neato 基于spring-model(又稱force-based)算法
- twopi 徑向布局
- circo 圓環布局
- fdp 用于無向圖
graphviz的設計初衷是對有向圖/無向圖等進行自動布局,開發人員使用dot腳本定義圖形元素,然后選擇算法進行布局,最終導出結果。
首先,在dot腳本中定義圖的頂點和邊,頂點和邊都具有各自的屬性,比如形狀,顏色,填充模式,字體,樣式等。然后使用合適的布局算法進行布局。布局算 法除了繪制各個頂點和邊之外,需要盡可能的將頂點均勻的分布在畫布上,并且盡可能的減少邊的交叉(如果交叉過多,就很難看清楚頂點之間的關系了)。所以使 用graphviz的一般流程為:
- 定義一個圖,并向圖中添加需要的頂點和邊
- 為頂點和邊添加樣式
- 使用布局引擎進行繪制
一旦熟悉這種開發模式,就可以快速的將你的想法繪制出來。配合一個良好的編輯器(vim/emacs)等,可以極大的提高開發效率,與常見的GUI應用的所見即所得模式對應,此模式稱為所思即所得。比如在我的機器上,使用vim編輯dot腳本,然后將F8映射為調用dot引擎去繪制當前腳本,并打開一個新的窗口來顯示運行結果:
對于開發人員而言,經常會用到的圖形繪制可能包括:函數調用關系,一個復雜的數據結構,系統的模塊組成,抽象語法樹等。
基礎知識
graphviz包含3中元素,圖,頂點和邊。每個元素都可以具有各自的屬性,用來定義字體,樣式,顏色,形狀等。下面是一些簡單的示例,可以幫助我們快速的了解graphviz的基本用法。
示例代碼:
>>> import pygraphviz as pgv >>> G=pgv.AGraph() >>> G.add_node('a') >>> G.add_edge('b','c') >>> G strict graph { a; b -- c; }