天天看點

Python中graphviz庫的使用安裝使用代碼樣例解讀後記參考資料

最近在做資料可視化的時候用到了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)
           

輸出的圖

Python中graphviz庫的使用安裝使用代碼樣例解讀後記參考資料

最後生成一個

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實作