如何使用networkx获取图概率分布并绘制最大连通分量对比图
解决方案
核心思路
你要分析边生成概率升高对最大连通分量的影响,需要固定总节点数,遍历多个不同的概率参数生成随机图,分别计算每个概率下的最大连通分量尺寸,再绘制二者的对应关系即可,不需要在单个图中计算概率分布。
你原有代码的问题是仅生成了单个固定概率的随机图,无法形成对比维度,且随机生成总节点数会干扰概率的影响效果。
完整可运行代码
import matplotlib.pyplot as plt import networkx as nx import numpy as np # 固定总节点数,唯一变量为边生成概率 total_nodes = 500 # 生成0到1区间的概率序列,步长可根据需要调整 prob_list = np.arange(0, 1.02, 0.02) # 存储每个概率对应的最大连通分量尺寸 lcc_size_list = [] for p in prob_list: # 生成当前概率对应的GNP随机图 G5 = nx.gnp_random_graph(total_nodes, p, directed=False) # 计算最大连通分量的节点数 largest_cc = max(nx.connected_components(G5), key=len) lcc_size_list.append(len(largest_cc)) # 绘制对比图 plt.figure(figsize=(10, 6)) plt.plot(prob_list, lcc_size_list, color='#1f77b4', linewidth=2, label='最大连通分量尺寸') plt.scatter(prob_list, lcc_size_list, color='#ff7f0e', s=20) plt.xlabel('边生成概率', fontsize=12) plt.ylabel('最大连通分量节点数', fontsize=12) plt.title('GNP随机图边概率与最大连通分量的对应关系', fontsize=14) plt.grid(alpha=0.3) plt.legend() plt.show()
效果说明
运行代码后可以观测到经典的随机图渗流相变现象:当边概率接近1/total_nodes时,最大连通分量的尺寸会出现突变式跃升,之后随着概率升高快速趋近总节点数。
内容的提问来源于stack exchange,提问作者user16612111
相关产品推荐
相关产品推荐

