python-3.x - 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")
解决方案
这是解决方案:
for edge in g.edges():
g.edges[edge]['source'] = 'int gi0/0/0'
g.edges[edge]['destination'] = 'int gi0/0/1'
推荐阅读
- android - 来自另一个 Activity 的 BottomNavigationView
- android - Android:如何针对特定 Dpi 屏幕进行目标布局
- fortran - Fortran 90中数组的维度
- objective-c - 如何在mapbox ios中显示源中添加的折线?
- javascript - 如何在节点中将 Hex 转换为 Unit8Array?
- typescript - Typescript 导入类型 Eslint:导入/命名
- office365 - 如何在 Yammer 上存储用户的点赞、创建等操作?
- c++ - Gradle:Java/Kotlin、C++、ProtoBuf 在同一个项目中
- microservices - pub/sub 通信和 Actor
- c# - 从文本文件中读取某些数据