2017-04-20 27 views
2

次のコードは、ランダムグラフで表示されるように動作します。しかし、他のグラフタイプを使用しようとすると、私はエッジ描画関数にエラーが発生します。特にエッジ位置。あなたはNetworkxグラフのエッジ描画エラー

G = nw.random_geometric_graph(200, 0.125) 

をコメントし、非コメント場合

G = nw.barabasi_albert_graph(200, 2) 

エラーメッセージが表示されます。私はPythonに新しく、特にNetworkXなので、どんな助けもありがとう!

import matplotlib.pyplot as plt 
import networkx as nw 

G = nw.random_geometric_graph(200, 0.125) 

#G = nw.watts_strogatz_graph(200, 3, 0.125, seed=None) 
#G = nw.barabasi_albert_graph(200, 2) 

# position is stored as node attribute data for random_geometric_graph 
pos = nw.get_node_attributes(G, 'pos') 

# find node near center (0.5, 0.5) 
dmin = 1 
ncenter = 0 
for n in pos: 
    x, y = pos[n] 
    d = (x - 0.5) ** 2 + (y - 0.5) ** 2 
    if d < dmin: 
     ncenter = n 
     dmin = d 

# color by path length from node near center 
p = nw.single_source_shortest_path_length(G, ncenter) 

plt.figure(figsize=(8, 8)) 

nw.draw_networkx_edges(G, pos, nodelist=[ncenter], alpha=0.4) 
nw.draw_networkx_nodes(G, pos, nodelist=list(p.keys()), node_size=80, node_color=list(p.values()), cmap=plt.cm.Reds_r) 

plt.xlim(-0.05, 1.05) 
plt.ylim(-0.05, 1.05) 
plt.axis('off') 
plt.savefig('random_geometric_graph.png') 
plt.show() 

エラーメッセージは次のとおりです。

--------------------------------------------------------------------------- 
KeyError         Traceback (most recent call last) 
<ipython-input-11-> in <module>() 
    22 plt.figure(figsize=(8,8)) 
    23 
---> 24 nw.draw_networkx_edges(G, pos, nodelist=[ncenter], alpha=0.4) 
    25 nw.draw_networkx_nodes(G, pos, nodelist=list(p.keys()), node_size=80, node_color=list(p.values()), cmap=plt.cm.Reds_r) 
    26 

/Users//anaconda/lib/python3.6/site-packages/networkx/drawing/nx_pylab.py in draw_networkx_edges(G, pos, edgelist, width, edge_color, style, alpha, edge_cmap, edge_vmin, edge_vmax, ax, arrows, label, **kwds) 
    513 
    514  # set edge positions 
--> 515  edge_pos = numpy.asarray([(pos[e[0]], pos[e[1]]) for e in edgelist]) 
    516 
    517  if not cb.iterable(width): 

/Users//anaconda/lib/python3.6/site-packages/networkx/drawing/nx_pylab.py in <listcomp>(.0) 
    513 
    514  # set edge positions 
--> 515  edge_pos = numpy.asarray([(pos[e[0]], pos[e[1]]) for e in edgelist]) 
    516 
    517  if not cb.iterable(width): 

KeyError: 0 
+2

エラーがある場合は、それらをポストに含めて、特定の行がエラーの原因となる行をハイライトします。 – EdChum

+0

'pos = nw.get_node_attributes(G、 'pos')'はランダムな幾何学グラフで機能します。他の人にとっては、 'pos'を '{}'(空文字)に設定するだけです。 – Joel

答えて

3

私は(このグラフでは接続がノード位置に依存して、それはデフォルトで1に設定することは理にかなって)自動的にrandom_geometric_graphセットから離れて、他のグラフの初期化メソッドノードの位置を考えていません。 watts_strogatz_graphで例を確認すると、返される辞書は実際には空です(間違いなくKeyErrorを投げます)。

レイアウトを明示的に決定する必要があります。

pos = nw.spring_layout(G) 

または他のレイアウトアルゴリズムを使用します。

1

あなたは(スタックトレースからの)問題は、この行であることがわかります。

nw.draw_networkx_edges(G, pos, nodelist=[ncenter], alpha=0.4) 

とエラーがKeyErrorなので、何かを見つけることができません。おそらく、edgesをここに描く必要がありますが、nodelistを入力してください。 official docsによれば、edgesを描画する方法は、nodelistではなく、edgelistを受け入れる必要があります。

だから、この実行する必要があります。これは、エッジ、ないノードでなければなりませんので、あなたは、中央ノードからそれらを見つける必要があること

nw.draw_networkx_edges(G, pos, edgelist=[SOME_EDGES_HERE], alpha=0.4) 

注意を。

関連する問題