天天看点

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实现