2012-08-03 64 views
11

networkx add_node我仍然networkx 初學者我要添加多種不同位置的節點,我用下面的代碼具體位置

pos = {0: (40, 20), 1: (20, 30), 2: (40, 30), 3: (30, 10)} 
X=nx.Graph() 
nx.draw_networkx_nodes(X,pos,node_size=3000,nodelist=[0,1,2,3],node_color='r') 

,但是當我要訪問圖形X,如果我鍵入X.node,它將返回一個空列表 ,如果我想添加更多的節點,我必須在開始時使用pos字典來設置它們的位置。

我如何使用add_node()

回答

19

我不是你想要完成的任務完全確定在特定位置x和y添加節點圖,但我把它解釋爲要添加節點到圖中,將它們繪製在想要的位置,並仍然可以在圖形對象中訪問它們。

既然你不節點添加到圖表,這將是一個開始:

X.add_nodes_from(pos.keys()) 

那麼你不必繪製圖形時指定節點列表,從而你添加新節點時不必在兩個不同的地方更改代碼。

如果您希望節點作爲節點屬性的位置,你能做到這一點還有:

for n, p in pos.iteritems(): 
    X.node[n]['pos'] = p 

只是注意,繪製圖形時,這些位置將不會被用作位置,它必須明確設定。然後,您可以繪製並顯示以下圖形:

nx.draw(X, pos) 
plt.show() 

假設您執行了導入from matplotlib import pyplot as plt

+2

而且是明確的,在pos指定的位置是相同的(X,Y)座標傳送給axes.scatter,所以它就像在右邊的x和y一樣。 – dmonopoly 2014-02-14 18:50:44

+0

真的很有幫助的答案,非常感謝!是否有來自networkx的函數來計算兩個節點之間的euklidic距離? – fuuman 2016-09-08 10:51:15

+0

@fuuman我可能會遲到這個,但據我所知,沒有直接的函數來計算兩個節點之間的歐幾里德距離。作爲一個參考,你可以使用這個給我的答案,前一段時間:http://stackoverflow.com/questions/36330642/python-edge-length-distribution-of-a-regular-network?answertab=active#標籤頂 – FaCoffee 2017-02-09 10:54:50

23

您可以使用以下方法設置單個節點位置,然後提取繪製時使用的「pos」字典。

In [1]: import networkx as nx 

In [2]: G=nx.Graph() 

In [3]: G.add_node(1,pos=(1,1)) 

In [4]: G.add_node(2,pos=(2,2)) 

In [5]: G.add_edge(1,2) 

In [6]: pos=nx.get_node_attributes(G,'pos') 

In [7]: pos 
Out[7]: {1: (1, 1), 2: (2, 2)} 

In [8]: nx.draw(G,pos) 

UPDATE

新增繪圖

enter image description here