【问题标题】:Networkx: Regenerate the Random Geometric Graph with previously stored Node values and edges in fileNetworkx:使用先前存储在文件中的节点值和边重新生成随机几何图
【发布时间】:2011-12-05 07:55:20
【问题描述】:

我正在生成随机几何图并存储节点和边 使用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 变量上。有人可以帮我吗 解决这个问题?

【问题讨论】:

    标签: python networkx


    【解决方案1】:

    考虑以下交互式会话:

    >>> 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'),它应该可以正常工作。

    【讨论】:

    • 我将其更改为字符串,现在可以正常工作了。但我认为由于 pos=nx.random_layout(G) 声明,我没有得到与预期相同的图表。所以我没有正确导入我在第一个代码中导出的节点值和边信息。知道如何正确导入吗?
    • @KunjanSheth 如果您对如何使用 NetworkX 有其他问题,请将其作为另一个问题发布,希望比您的评论更准确地说明。 Stackoverflow 是一个问答网站,而不是论坛。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2018-06-27
    相关资源
    最近更新 更多