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 个回答
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']
>>>
在从文件中读取节点列表时,节点的身份被当作字符串来处理,而不是数字。所以你会遇到错误,因为你试图绘制两个不存在的节点 1
和 2
。把它们改成字符串形式('1'
和 '2'
),这样就可以正常工作了。