Networkx:使用先前存储的节点值和文件边缘重新生成随机几何图形

时间:2011-12-05 07:55:21

标签: python networkx

我正在生成随机几何图并存储节点和边 使用write_adjlist进入文件的信息。

代码:python1.py

G=nx.random_geometric_graph(10,0.5) 
filename = "ipRandomGrid.txt" 
fh=open(filename,'wb') 
nx.write_adjlist(G, fh) 
nx.draw(G) 
plt.show()

现在我从第二个文件中尝试生成图表 相同的节点和边缘信息。我正在使用read_adjlist来查找 信息。

代码:python2.py

filename = "ipRandomGrid.txt" 
fh=open(filename, 'rb') 
G=nx.Graph() 
G=nx.read_adjlist("ipRandomGrid.txt") 
pos=nx.random_layout(G) 
nx.draw_networkx_nodes(G,pos,nodelist=[1,2],node_color='b') 
nx.draw(G) 
plt.show()

它向我显示错误。

raise nx.NetworkXError('Node %s has no position.'%e) 
networkx.exception.NetworkXError: Node 1 has no position. 

我认为问题出在pos变量上。有人可以帮助我 解决这个问题?

1 个答案:

答案 0 :(得分:2)

考虑以下互动环节:

>>> import networkx as nx
>>> G = nx.random_geometric_graph(10, 0.5)
>>> with open("junk.txt", "wb") as f:
...   nx.write_adjlist(G, f)
...
>>> G.nodes()
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> with open("junk.txt", "rb") as f:
...   G2 = nx.read_adjlist(f)
...
>>> G2.nodes()
[u'1', u'0', u'3', u'2', u'5', u'4', u'7', u'6', u'9', u'8']
>>>

从文件中读取节点列表时,节点标识被视为字符串,而不是数字。因此,您收到错误是因为您尝试绘制两个不存在的节点12。将它们更改为字符串('1''2'),它应该可以正常工作。