python的NetworkX库可以帮助我们构建网络拓扑并实现拓扑的可视化,这对于网络研究,日常展示等都是十分的方便。不过,我发现并没有文章比较系统的介绍如何在可视化的图中展示节点和边的属性,从而让图更加的具体,直观。因此就想写一篇文章来教会大家如何在图中显示节点和边的属性。
总体思路
先说总体思路,想要展示节点和边的属性,我们需要借助如下两个函数(重点关注labels参数):
draw_networkx_labels(G, pos, labels=a dictionary used to describe what you want to show in node)
draw_networkx_edge_labels(G, pos, edge_labels=a dictionary used to describe what you want to show in edge)
draw_networkx_labels会在图中的节点上显示你通过labels参数传入的数据。
同理,draw_networkx_edge_labels则会在图中的边上显示你通过edge_labels参数传入的数据。
需要注意的是,这两个函数只显示了labels,并不会将点啊,边啊显示出来。所以,为了显示完整的拓扑,在调用以上两个函数之前,需要先调用draw(G, pos)将基础的点边拓扑先画出来,然后再调用draw_networkx_labels和draw_networkx_edge_labels来画出点的labels和边的labels。
模板代码如下:
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
# write your topology construction logic here
pos = nx.spring_layout(G) # choose a layout from https://networkx.github.io/documentation/latest/reference/drawing.html#module-networkx.drawing.layout
nx.draw(G, pos)
node_labels = {a dictionary contains what you want you show. Key:node_name. Value:text shown in node G.nodes[node_name]}
nx.draw_networkx_labels(G, pos, labels=node_labels)
edge_labels = {a dictionary contains what you want you show. Key:edge. Value:text shown in edge}