Python中netgraph模块MultiGraph函数设置随机种子无效,如何解决?
如何为netgraph的MultiGraph固定布局随机种子
可以通过两种方式固定netgraph绘图时的布局,避免每次运行结果不同:
方法1:给布局函数传递seed参数(推荐)
netgraph的MultiGraph默认使用弹簧布局(spring layout),该布局算法支持seed参数来固定随机初始化位置。你可以通过layout_kwargs参数将seed传递给布局函数:
修改后的代码如下:
import networkx as nx import matplotlib.pyplot as plt from netgraph import MultiGraph import pandas as pd G = nx.MultiDiGraph() G.add_node('Surabaya') G.add_node('Yogyakarta') G.add_node('Bali') G.add_node('Semarang') G.add_node('Medan') G.add_node('Makassar') G.add_node('Padang') G.add_node('Palembang') G.add_node('Jakarta') G.add_node('Bandung') df = pd.read_csv("data.csv") for x,y,z in zip(df['Asal'],df['Tujuan'],df['Ongkos']): G.add_edge(str(x), str(y), weight=z) plt.figure(figsize=(12,12)) MultiGraph( G, node_labels=True, node_color="skyblue", node_size=4.25, node_label_fontdict=dict(fontsize=8), edge_color="gray", edge_labels=nx.get_edge_attributes(G, 'weight'), edge_label_fontdict=dict(fontsize=9), arrows=True, # 添加布局参数,固定随机种子 layout_kwargs={'seed': 42} # 数值可任意指定,比如42、100等 ) plt.show()
方法2:全局设置numpy随机种子
如果布局算法依赖numpy的随机数生成,也可以在代码开头设置全局numpy随机种子,固定所有依赖numpy随机操作的结果:
import numpy as np np.random.seed(42) # 放在导入模块之后、绘图之前执行 # 后续代码保持不变
注意:方法2会影响整个脚本中所有numpy相关的随机操作,因此更推荐方法1,仅针对布局固定种子。
内容的提问来源于stack exchange,提问作者salwa alifah
相关产品推荐
相关产品推荐

