如何让NetworkX绘制的图显示对应度数序列的节点度数?
解决NetworkX绘图显示原始度数序列标签的问题
核心就是给每个节点绑定你输入的度数作为自定义标签,然后绘图时指定用这些标签就行,直接上修改后的代码和说明:
代码示例
假设你原来的代码是这样的:
import networkx as nx import matplotlib.pyplot as plt degree_seq = [1, 2, 3, 4] G = nx.configuration_model(degree_seq) # 原来的绘图(只显示节点编号) nx.draw(G, with_labels=True) plt.show()
改成下面这样,就能让节点显示对应的输入度数:
import networkx as nx import matplotlib.pyplot as plt degree_seq = [1, 2, 3, 4] G = nx.configuration_model(degree_seq) # 做个节点到原始度数的映射:节点ID对应度数序列里的数值 node_labels = {i: degree_seq[i] for i in range(len(degree_seq))} # 先算布局,分开画节点和标签,样式更可控 pos = nx.spring_layout(G) # 先画节点和边,不显示默认标签 nx.draw(G, pos, with_labels=False, node_size=800) # 把自定义的度数标签画上去,还能调字体样式 nx.draw_networkx_labels(G, pos, node_labels, font_size=16, font_color="white") plt.show()
关键细节
node_labels字典直接把每个节点的索引(0、1、2、3)对应到你输入的度数序列值,保证每个节点显示的是你想要的度数。- 分开绘制节点和标签是为了避免默认标签的样式问题,比如把字体设成白色放在深色节点上,看得更清楚。
- 如果你的度数序列是[4,4],用同样的方法,两个节点都会显示4,完全符合需求。
额外优化(可选)
configuration_model可能生成自环或者多重边,要是想让图更规整,可以加两行代码去掉这些:
# 移除自环 G.remove_edges_from(nx.selfloop_edges(G)) # 把多重边转成简单边 G = nx.Graph(G)
内容的提问来源于stack exchange,提问作者learner_from_scratch
相关产品推荐
相关产品推荐

