赞
踩
pygraphviz实现了对graphviz的封装,可以轻松地实现流程图等图形的绘制,支持的图形样式包括dot、neato、fdp等,绘制二叉树需要用到dot格式,更多的dot语言以及以下代码中add_node函数和add_edge函数需要用到的参数详见dot官网或者dot手册
安装教程见链接
二叉树的绘制python代码
# coding=utf-8 import pygraphviz as pgv graph = pgv.AGraph() graph.add_node('nodeA', shape='circle', label='A', style='bold') graph.add_node('nodeB', shape='circle', label='B', style='bold') graph.add_node('nodeC', shape='circle', label='C', style='bold') graph.add_node('nodeD', shape='circle', label='D', style='bold') graph.add_node('nodeE', shape='circle', label='E', style='bold') graph.add_node('nodeF', shape='circle', label='F', style='bold') graph.add_edge('nodeA', 'nodeB', style='bold', tailport='sw') # sw是从节点的西南方向引出边 graph.add_edge('nodeB', 'nodeC', style='bold', tailport='sw') graph.add_edge('nodeB', 'nodeD', style='bold', tailport='se') # sw是从节点的东南方向引出边 graph.add_edge('nodeD', 'nodeE', style='bold', tailport='sw') graph.add_edge('nodeA', 'nodeF', style='bold', tailport='se') graph.layout('dot') graph.draw('.\\bin_tree.jpg')
以上代码得到图形
为了使二叉树伸展性更好,可以对所有的空指针域添加不可见边
# coding=utf-8 import pygraphviz as pgv graph = pgv.AGraph() graph.add_node('nodeA', shape='circle', label='A', style='bold') # bold参数是加粗 graph.add_node('nodeB', shape='circle', label='B', style='bold') graph.add_node('nodeC', shape='circle', label='C', style='bold') graph.add_node('nodeD', shape='circle', label='D', style='bold') graph.add_node('nodeE', shape='circle', label='E', style='bold') graph.add_node('nodeF', shape='circle', label='F', style='bold') graph.add_node('nodeCL', style='invis') # 添加不可见节点, 使得二叉树伸展性更好 graph.add_node('nodeCR', style='invis') graph.add_node('nodeEL', style='invis') graph.add_node('nodeER', style='invis') graph.add_node('nodeDR', style='invis') graph.add_node('nodeFL', style='invis') graph.add_node('nodeFR', style='invis') graph.add_edge('nodeA', 'nodeB', style='bold', tailport='sw') graph.add_edge('nodeB', 'nodeC', style='bold', tailport='sw') graph.add_edge('nodeB', 'nodeD', style='bold', tailport='se') graph.add_edge('nodeD', 'nodeE', style='bold', tailport='sw') graph.add_edge('nodeA', 'nodeF', style='bold', tailport='se') graph.add_edge('nodeC', 'nodeCL', style='invis', tailport='sw') # 添加不可见边 graph.add_edge('nodeC', 'nodeCR', style='invis', tailport='se') graph.add_edge('nodeE', 'nodeEL', style='invis', tailport='sw') graph.add_edge('nodeE', 'nodeER', style='invis', tailport='sw') graph.add_edge('nodeD', 'nodeDR', style='invis', tailport='se') graph.add_edge('nodeF', 'nodeFL', style='invis', tailport='sw') graph.add_edge('nodeF', 'nodeFR', style='invis', tailport='se') graph.layout('dot') graph.draw('.\\bin_tree.jpg')
一些更为复杂的图形:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。