Graphviz简易绘图(Python)

graphviz简介

graphviz是Graphviz 图形绘图软件提供的一个简单的Python界面。
在Python的graphviz模块中,主要提供了两个类:Graph与 Digraph。Graph创建无向图,而 Digraph创建有向图。

点击进入Graphviz官网

无向图
from graphviz import Graph

# 无向图
g = Graph(comment='Undirected Graph',format='png')

g.node('A', 'I')
g.node('B', 'Apple')
g.node('C', 'Pen')
g.edges(['AB', 'AC'])

g.render('test-output/Undirected_Graph.gv', view=True)

运行程序,生成PNG格式图片:
在这里插入图片描述

有向图
from graphviz import Digraph

# 有向图
g = Digraph(comment='Directed graph',format='png')

g.node('A', 'Are')
g.node('B', 'You')
g.node('C', 'Ok')
g.node('D', '?')
g.edges(['AB', 'AC', 'CD', 'BD'])

g.render('test-output/directed_Graph.gv', view=True)

运行程序,生成PNG格式图片:
在这里插入图片描述

基本属性
from graphviz import Digraph

# 实例化一个Digraph对象(有向图);name——生成图名;comment——打印DOT source源码第一行注释;format——图片格式
dot = Digraph(name="Test01", comment="The Properties Test", format="png")
# 设置背景
dot.attr(bgcolor='white:pink', label='background', fontcolor=’black‘)

# name——节点对象的名称;label——节点名;color——节点的颜色
dot.node(name='A', label='Me', color='Red', style='filled')
dot.node(name='B', label='She', color='Blue', shape='circle')
dot.node(name='C', label='He', shape='diamond')
dot.node(name='D', label='She', color='Yellow', shape='triangle')
dot.node(name='E', label='Dog', shape='egg')
dot.node(name='F', label='Cat', shape='star')

# label——节点之间线上的文本;color——线的颜色
dot.edge('D', 'A', label="Love\nMe:)", color='Green')
# 同时连线AB与BC
dot.edges(['AB', 'BC', 'CF', 'BE'])
# 虚线
dot.edge('C', 'D', style='dotted')
# 设置箭头大小
dot.edge('D', 'E', label="Pet", arrowhead='vee', arrowsize='3', color='lightblue2')
dot.edge('A', 'F', label="Pet")

# 获取DOT source源码的字符串形式
print(dot.source)

# filename——生成图片的名称;若无filename,则使用Digraph对象的name,name后缀默认为gv;directory——图片保存的路径
dot.view(filename="Test01", directory="D:\workplace\PycharmProjects\\testGraphviz\\test-output")

# 一般用render生成图片,view=True调试
dot.render('test-output/test-table.gv', view=True)

运行程序,生成PNG格式图片:
在这里插入图片描述
打印出的DOT source源码为:

// The Properties Test
digraph Test01 {
 bgcolor="white:pink" fontcolor=black label=background
 A [label=Me color=Red style=filled]
 B [label=She color=Blue shape=circle]
 C [label=He shape=diamond]
 D [label=She color=Yellow shape=triangle]
 E [label=Dog shape=egg]
 F [label=Cat shape=star]
 D -> A [label="Love
Me:)" color=Green]
 A -> B
 B -> C
 C -> F
 B -> E
 C -> D [style=dotted]
 D -> E [label=Pet arrowhead=vee arrowsize=3 color=lightblue2]
 A -> F [label=Pet]
}
BTree
from graphviz import Digraph, nohtml

g = Digraph('g', filename='btree.gv', format='png',
            node_attr={'shape': 'record', 'height': '.1'})

g.node('node0', nohtml('<f0> |<f1> G|<f2>'))
g.node('node1', nohtml('<f0> |<f1> E|<f2>'))
g.node('node2', nohtml('<f0> |<f1> B|<f2>'))
g.node('node3', nohtml('<f0> |<f1> F|<f2>'))
g.node('node4', nohtml('<f0> |<f1> R|<f2>'))
g.node('node5', nohtml('<f0> |<f1> H|<f2>'))
g.node('node6', nohtml('<f0> |<f1> Y|<f2>'))
g.node('node7', nohtml('<f0> |<f1> A|<f2>'))
g.node('node8', nohtml('<f0> |<f1> C|<f2>'))

g.edge('node0:f2', 'node4:f1')
g.edge('node0:f0', 'node1:f1')
g.edge('node1:f0', 'node2:f1')
g.edge('node1:f2', 'node3:f1')
g.edge('node2:f2', 'node8:f1')
g.edge('node2:f0', 'node7:f1')
g.edge('node4:f2', 'node6:f1')
g.edge('node4:f0', 'node5:f1')

g.render('test-output/btree.gv', view=True)

运行代码,生成PNG格式图片:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/KAIZ_LEARN/article/details/106100358
今日推荐