首页 文章

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

提问于
浏览
2

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

Topology example

如果可能,我想知道如何为每个节点添加自定义图像(默认情况下,形状是正方形,但我想使用路由器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")

1 回答

  • 0

    这是解决方案:

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

相关问题