Networkx-导出带有边缘标签,高度和宽度属性,自定义图像的graphml

时间:2018-06-26 17:49:30

标签: python-3.x networkx graphml

我想使用python自动化网络拓扑图。我是python的新手,所以请多多包涵。经过一些研究,我发现我可以使用python创建可以由yEd读取的graphml文件。 我正在学习如何使用Networkx创建graphml文件。到目前为止,我已经能够创建节点,连接它们并向节点添加标签(这些标签将是主机名)。现在,我需要知道如何将标签添加到边缘(这些标签将是界面)。例如:

Topology example

如果可能的话,我想知道如何为每个节点添加自定义图像(默认情况下形状为正方形,但是我想使用路由器png文件)。 如果不可能,那么了解如何编辑形状的高度和宽度以及禁用箭头将很有帮助。 我已经查看了networkx网站上的文档,但是还没有找到如何直接对图形对象进行这些更改。我所看到的唯一方法是绘制图形时,例如使用以下函数:nx.draw_networkx_labels(G,pos,labels,font_size = 15,arrow = False),但这不是我所需要的,因为不会保存到graphml文件。 如果有人可以指导我完成这项工作,那将非常有帮助,我附上了我的代码:

import networkx as nx
import matplotlib
import matplotlib.pyplot as plt

g = nx.DiGraph()

g.add_node('Hostname_A')
g.add_node('Hostname_B')
g.add_node('Hostname_C')
g.add_node('Hostname_D')

g.add_edge('Hostname_A','Hostname_B')
g.add_edge('Hostname_A','Hostname_C')
g.add_edge('Hostname_B','Hostname_D')
g.add_edge('Hostname_B','Hostname_C')

for node in g.nodes():
    g.node[node]['label'] = node

nx.readwrite.write_graphml(g, "graph.graphml")

1 个答案:

答案 0 :(得分:0)

这是解决方案:

for edge in g.edges(): 
g.edges[edge]['source'] = 'int gi0/0/0' 
g.edges[edge]['destination'] = 'int gi0/0/1'