如何使用pygraphviz python绘制具有最小距离的节点

时间:2019-01-30 16:18:14

标签: python drawing topology pygraphviz

我试图通过 SNMP 从交换机收集信息,并通过python pygraphviz 可视化软件包绘制已连接交换机的拓扑。我想运行程序以查看当前拓扑并以常规A4尺寸页面打印拓扑。 问题是,由于开关之间的距离较长,因此无法在常规A4尺寸的纸张上打印整个拓扑。有什么方法可以使连接的节点之间保持最短的距离,以使整个拓扑适合单个A4尺寸的页面。我绘制拓扑的代码类似于下面给出的代码:

from pysnmp.entity.rfc3413.oneliner import cmdgen
import pygraphviz as pgv
import time

graph = pgv.AGraph(format='svg',strict='True')
edges = []

edges.append(('switch1','24','switch2', '1'))
edges.append(('switch1','25','switch3', '2'))
edges.append(('switch1','26','switch4', '3'))
edges.append(('switch1','27','switch5', '4'))
edges.append(('switch1','28','switch6', '5'))
edges.append(('switch1','29','switch7', '6'))
edges.append(('switch1','30','switch8', '7'))
edges.append(('switch2','2','switch11', '1'))
edges.append(('switch11','2','switch12', '1'))
edges.append(('switch3','3','switch13', '1'))
edges.append(('switch13','2','switch14', '1'))
edges.append(('switch13','3','switch15', '1'))
edges.append(('switch4','1','switch16', '1'))
edges.append(('switch16','2','switch17', '1'))
edges.append(('switch16','3','switch18', '1'))
edges.append(('switch16','4','switch19', '1'))
edges.append(('switch16','5','switch20', '1'))
edges.append(('switch5','1','switch23', '1'))
edges.append(('switch5','2','switch24', '1'))
edges.append(('switch5','3','switch25', '1'))
edges.append(('switch26','2','switch27', '1'))
edges.append(('switch27','2','switch28', '1'))
edges.append(('switch5','6','switch29', '1'))
edges.append(('switch5','5','switch27', '3'))
edges.append(('switch29','2','switch30', '1'))
edges.append(('switch30','2','switch31', '1'))
edges.append(('switch31','2','switch32', '1'))
edges.append(('switch32','2','switch33', '1'))
edges.append(('switch33','2','switch34', '1'))

for edge in edges:
 graph.add_edge(edge[0],edge[2],taillabel=str(edge[3]),headlabel=str(edge[1]))

timestr = time.strftime("%Y%m%d-%H%M%S")
graph.node_attr["shape"] = "box"
graph.graph_attr.update(ranksep='0.1')
#graph.edge_attr.update(len='1.0', color='red')
graph.layout(prog="circo")
graph.draw("output1/amap_trd"+timestr+".ps")
graph.draw("output1/amap_trd"+timestr+".png")

输出: topology with long edge distance

也许,我缺少一个简单的代码,如果这是一个非常愚蠢的问题,请原谅。期待答复。 预先感谢。

0 个答案:

没有答案