Graphviz---一款开源图形可视化工具(python的使用)

前期准备知识

安装Graphviz

第一步:Graphviz官网安装graphviz(可下载.msi和免安装版),下载后将bin目录配置到环境变量Path中node

第二步:命令行安装graphviz,这个模块给出了不少的python接口去使用Graphviz软件python

pip install graphviz

python-graphviz 是什么?数据库

官网 文档浏览器

==简介==:Graphviz是AT&T Labs Research开发的开源图形可视化软件。图形可视化是一种将结构信息表示为抽象图形和网络图的方式。它在网络,生物信息学,软件工程,数据库和网页设计,机器学习以及其余技术领域的可视界面中具备重要的应用。网络

==特征==:Graphviz布局程序以简单的文本语言获取图形的描述,并以有用的格式制做图表,例如用于网页的图像和SVG;PDF或Postscript,以包含在其余文档中;或在交互式图形浏览器中显示。Graphviz具备用于具体图表的许多有用功能,例如颜色,字体,表格节点布局,线条样式,超连接和自定义形状的选项。机器学习

使用原理: graphviz实际是一种绘图工具,能够根据dot脚原本画出树形图,==咱们能够利用python代码生成dot脚本==,而后调用graphviz来解析脚本,生成一张图片.工具

dot脚本语言:是开源工具包Graphviz上用来画图的一门脚本语言,语法很是简单,官方文档也只有8页。

案例

案例一:布局

from graphviz import Digraph
dot = Digraph(comment='The Test Table')# 给dot脚本语言加注释

#----------建立结点语句----
# 添加圆点A,A的标签是Dot A
dot.node('A', 'Dot A')
# 添加圆点 B, B的标签是Dot B
dot.node('B', 'Dot B')
# 添加圆点 C, C的标签是Dot C
dot.node(name='C', label= 'Dot C',color='red')

#----------建立边的语句-----(两种方式)
# 建立一堆边,即链接AB的两条边,链接AC的一条边。
dot.edges(['AB', 'AC'])
# 在建立两圆点之间建立一条边
dot.edge('B', 'C', 'test')

#--------观看原dot语言的表达形式-----
# 获取DOT source源码的字符串形式,如图一
print(dot.source)

#--------显示图像的-----------
#dot.view()  直接显示,使用Digraph.gv默认名
dot.render('test-table.gv', view=True)# 设置图片名,以及直接显示

案例二:学习

from graphviz import Digraph


sub_g0 = Digraph(comment="process1",graph_attr={"style":'filled',"color":'lightgrey'},node_attr={"style":"filled","color":"red"})
sub_g0.node("a0","a0")
sub_g0.node("a1","a1")
sub_g0.node("a2","a2")
sub_g0.node("a3","a3")
sub_g0.edge("a0","a1")
sub_g0.edge("a1","a2")
sub_g0.edge("a2","a3")
sub_g0.edge("a3", "a0")

sub_g1 = Digraph(comment="process1",graph_attr={"style":'filled'})
sub_g1.node("B","b0")
sub_g1.node("C","b1")
sub_g1.node("D","b2")
sub_g1.node("E","b3")
sub_g1.edges(["BC","CD","DE"])

grap_g = Digraph("G",format="pdf")

grap_g.node(
"start", label="start",shape="Mdiamond")
grap_g.node(
"end", label="end", shape="Mdiamond")

grap_g.subgraph(sub_g0)  #将sub_g0和sub_g0  的Digraph加入到grap_g的Digraph中,方便一次显示
grap_g.subgraph(sub_g0)

grap_g.edge("start","a0")
grap_g.edge("start","B")

grap_g.edge("a1","E")
grap_g.edge("D","a3")

grap_g.edge("a3","end")
grap_g.edge("E","end")

grap_g.view()
#grap_g.render('test-table2.gv', view=True)