実現したいこと
networkxを用いてネットワーク図の作成をしています。描画そのものはできるのですが、実行するたびに図の形状が異なったものになります。これを常に同じものにしたいと思います。
該当コード
python
1import networkx as nx 2import matplotlib.pyplot as plt 3 4g = nx.Graph() 5 6g.add_nodes_from([1,2], size=10) 7g.add_nodes_from([3,4], size=20) 8 9 10g.add_edge(1,2,weight=2) 11g.add_edge(1,3,weight=4) 12g.add_edge(1,4,weight=6) 13 14g.add_edge(2,3,weight=0.5) 15g.add_edge(3,4,weight=0.25) 16 17pos = nx.spring_layout(g) 18nx.draw_networkx(g,pos=pos) 19 20plt.show()
その他
実行環境は以下の通りです。
OS:Windows 64bit
Python:3.6 系
networkx:1.11
各ノードのポジションは、nx.spring_layoutで計算しています。実行するたびにこの結果が異なることが原因のなので、何らかの方法で結果が固定となるようにできればと考えています。
nx.spring_layoutのオプションにpos(ポジションを外部から与えるためのもの)とfixed(計算結果を用いずに固定したポジションとしたいノードの指定)を使えば固定化できることはわかっています。しかしながら、それだとノード間の距離を踏まえたちょうどいい感じのポジションを自力で計算する必要があり、networkxを使用する必要がなくなってしまいます。
想像でしかありませんが、ポジション計算時の各ノードの初期設定ポジションがランダムなため、実行するたびに結果が異なるのではないかと考えています。したがって、機械学習系の関数にあるrandom_stateのようなオプションがあると安定化できそうなのですが、見当たりません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/21 02:50
2018/01/21 03:07
2018/01/21 15:04
2018/01/21 15:47