Python中graphviz库的使用

最近在做数据可视化的时候用到了graphviz库,用于生成决策树、流程图效果拔群,在这里记录一下用法

安装

pip install graphviz

直接pip,不多解释了

使用

以下代码均在python3.6.1下编译通过

  • 导入库

    from graphviz import Digraph
  • 创建表

    dot = Digraph(name, comment)
  • 添加点

    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)

输出的图

屏幕快照 2018-03-07 上午11.33.45.png

最后生成一个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实现

  • 10
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值