最近在做数据可视化的时候用到了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实现