首页 > 解决方案 > Networkx - 使用边缘标签、高度和宽度属性、自定义图像导出 graphml

问题描述

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

拓扑示例

如果可能的话,我想知道如何为每个节点添加自定义图像(默认情况下,形状是正方形,但我想使用路由器 png 文件)。如果不可能,那么了解如何编辑形状的高度和宽度以及禁用箭头会很有帮助。我已经查看了 networkx 网站上的文档,但我还没有找到如何直接对图形对象进行这些更改。我看到它完成的唯一方法是在绘制图形时,例如使用以下函数:nx.draw_networkx_labels(G, pos, labels, font_size=15, arrows=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")

标签: python-3.xnetworkxgraphml

解决方案


这是解决方案:

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

推荐阅读