2012-08-03 35 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