2016-06-29 17 views
0

我試圖通過networkx繪製圖形。但是,下面的代碼遭受就是通過networkx引發`NetworkXError:節點8沒有位置錯誤'無法繪製超過8個節點

NetworkXError: Node 8 has no position

我相信,只有不到七個節點被允許的錯誤,但我不明白爲什麼。

請提出錯誤發生的原因以及如何修復繪製超過8個節點。

import networkx as nx 

# new_words = ["1","2","3","4","5","6","7"] => It does not occur the error 
new_words = ["1","2","3","4","5","6","7","8"] 
target_word = ["0"] 

G=nx.cubical_graph() 
pos=nx.spring_layout(G) 

nx.draw_networkx_nodes(G,pos, 
         nodelist=[0], 
         node_color='r', 
         node_size=50, alpha=0.8) 
nx.draw_networkx_nodes(G,pos, 
         nodelist=range(1, len(new_words)+1), 
         node_color='w', 
         node_size=50, alpha=0.8) 

nx.draw_networkx_edges(G,pos, 
         edgelist=[(0,i) for i in range(1,len(new_words)+1)]) 


# some math labels 
labels={} 
labels[0]=target_word 
for idx in range(0,len(new_words)): 
    labels[idx+1] = new_words[idx] 

nx.draw_networkx_labels(G,pos,labels) 

的錯誤信息是:

--------------------------------------------------------------------------- 
NetworkXError        Traceback (most recent call last) 
<ipython-input-16-5ddab3dbe0d6> in <module>() 
    15      nodelist=range(1, len(new_words)+1), 
    16      node_color='w', 
---> 17      node_size=50, alpha=0.8) 
    18 
    19 nx.draw_networkx_edges(G,pos, 

/Users/sudou/.pyenv/versions/anaconda-2.0.1/lib/python2.7/site-packages/networkx/drawing/nx_pylab.pyc in draw_networkx_nodes(G, pos, nodelist, node_size, node_color, node_shape, alpha, cmap, vmin, vmax, ax, linewidths, label, **kwds) 
    384   xy = numpy.asarray([pos[v] for v in nodelist]) 
    385  except KeyError as e: 
--> 386   raise nx.NetworkXError('Node %s has no position.'%e) 
    387  except ValueError: 
    388   raise nx.NetworkXError('Bad value in node positions.') 

NetworkXError: Node 8 has no position. 
+0

它會幫助別人顯示,拋出異常(哪一行) –

+0

@Andreas_D謝謝。我添加了錯誤消息和堆棧跟蹤。 – rkjt50r983

回答

1

nx.cubical_graph()有8個節點。即[0,1,2,3,4,5,6,7]。您發送了一個nodelist,其中包含節點8,該節點不是圖形的一部分。您繪製的圖形是立方體的圖形 - 8個節點(頂點)和12個邊(立方體的邊)。

您要求它繪製8節點圖的9個節點。因此它無法找到該節點的位置。

對於如何在圖表中繪製多於8個節點的問題,您必須從多於8個節點的圖形開始。

+0

謝謝。是否可以繪製一個包含9個以上節點的標記圖? – rkjt50r983

+0

當然可以。但是圖形本身必須包含您在'nodelist'中列出的所有節點。除非你有理由指定節點的一個子集,否則你甚至不應該包含可選的'nodelist'參數。 – Joel