最近在做資料可視化的時候用到了graphviz庫,用于生成決策樹、流程圖效果拔群,在這裡記錄一下用法
安裝
pip install graphviz
直接pip,不多解釋了
使用
以下代碼均在python3.6.1下編譯通過
- 導入庫
from graphviz import Digraph
- 建立表
- 添加點
dot.node(name, label)
- 在兩點間建立一條邊
dot.edge(tail_name, head_name, label)
- 建立多條邊
edges(self, tail_head_iter) # tail_head_iter: Iterable of (tail_name, head_name) pairs.
- 擷取DOT source源碼的字元串形式
print(dot.source)
- 儲存source到檔案,并提供Graphviz引擎
render(filename=None, directory=None, view=False, cleanup=False) # 參數分别為檔案名、檔案儲存路徑、是否用預設程式打開渲染效果、是否在渲染後删除源檔案
- 檢視目前圖效果
dot.view()
代碼樣例
from graphviz import Digraph
dot = Digraph(comment='The Test Table')
# 添加圓點A,A的标簽是Dot A
dot.node('A', 'Dot A')
# 添加圓點 B, B的标簽是Dot B
dot.node('B', 'Dot B')
# dot.view()
# 添加圓點 C, C的标簽是Dot C
dot.node('C', 'Dot C')
# dot.view()
# 建立一堆邊,即連接配接AB的兩條邊,連接配接AC的一條邊。
dot.edges(['AB', 'AC', 'AB'])
# dot.view()
# 在建立兩圓點之間建立一條邊
dot.edge('B', 'C', 'test')
# dot.view()
# 擷取DOT source源碼的字元串形式
print(dot.source)
# // The Test Table
# digraph {
# A [label="Dot A"]
# B [label="Dot B"]
# C [label="Dot C"]
# A -> B
# A -> C
# A -> B
# B -> C [label=test]
# }
# 儲存source到檔案,并提供Graphviz引擎
dot.render('test-output/test-table.gv', view=True)
輸出的圖
最後生成一個
test-output
檔案夾,其中包含一個源檔案
test-table.gv
和pdf格式的圖
test-table.gv.pdf
解讀
以上的程式一次完成輸出,可以直接輸出圖形,有一個直接的感受。
但是,通過檢視源碼,可以發現共有五個檔案:
_compat.py , dot.py, files.py, lang.py,tools.py
其中以上程式中用到的基本都在dot.py中,檢視檔案。
檔案中共定義了三個類:Dot,Graph,Digraph,後兩者都是繼承Dot.
以上使用的dot執行個體對象具有 Dot的所有屬性與方法。是以以上使用的方法的文法可以參考 Dot的類定義。
同時在類Dot 繼承自files.py中的File類,是以上面使用的dot.render的文法可以在File類中檢視。
後記
在網上查找的資源來看,直接使用digraph類畫圖或許是一種更為普遍的方法,從以上樣例代碼中
print(dot.source)
也可以看出直接使用digraph類的方法,但我本身需求并不需要這樣,是以在這裡就不進行嘗試了,如有需要可以參考dot文法
參考資料
Graphviz -圖形可視化,python實作