【问题标题】:Importing layout position for a graph using networkx使用networkx导入图形的布局位置
【发布时间】:2011-12-06 04:38:59
【问题描述】:

我对 Networkx 很陌生。我正在尝试导入由random_layout() 函数生成的布局位置。我不知道该怎么做。

生成布局位置的代码:

G = nx.random_geometric_graph(10, 0.5)
pos = nx.random_layout(G)
nx.set_node_attributes(G, 'pos', pos)
f = open("graphLayout.txt", 'wb')
f.write("%s" % pos)
f.close()
print pos
filename = "ipRandomGrid.txt"
fh = open(filename, 'wb')
nx.write_adjlist(G, fh)
#nx.write_graphml(G, sys.stdout)
nx.draw(G)
plt.show()
fh.close()

文件:ipRandomGrid.txt

# GMT Tue Dec 06 04:28:27 2011
# Random Geometric Graph
0 1 3 4 6 8 9 
1 3 4 6 8 9 
2 4 7 
3 8 6 
4 5 6 7 8 
5 8 9 6 7 
6 7 8 9 
7 9 
8 9 
9 

我将节点adjlist 和布局都存储在文件中。现在我想从其他文件生成具有相同布局和adjlist 的图形。我尝试使用以下代码生成它。谁能帮我弄清楚这里出了什么问题。

导入时的代码: 伪代码

G = nx.Graph() 
G = nx.read_adjlist("ipRandomGrid.txt")
# load POS value from file 
nx.draw(G)
nx.draw_networkx_nodes(G, pos, nodelist=['1','2'], node_color='b')
plt.show()

【问题讨论】:

  • 我们还需要两件事来帮助您。 1) 文件数据示例。 2) 运行脚本时看到的任何错误消息。
  • (1) 文件:ipRandomGrid.txt # GMT Tue Dec 06 04:28:27 2011 # Random Geometric Graph 0 1 3 4 6 8 9 1 3 4 6 8 9 2 4 7 3 8 6 4 5 6 7 8 5 8 9 6 7 6 7 8 9 7 9 8 9 9 (2) 第一个代码运行良好。第二个我不知道如何完成它。

标签: python networkx


【解决方案1】:

nx.random_layout 函数返回一个字典,将节点映射到位置。由于pos 是一个Python 对象,您不想像在f.write("%s" % pos) 中那样将其打印的字符串版本存储到文件中。这为您提供了一个包含您的字典的文件,但读回它并不容易。

改为使用为该任务设计的标准库模块之一序列化pos,例如jsonpickle。它们的界面基本相同,所以我将仅展示如何使用pickle 进行操作。存储是:

with open("graphLayout.txt", 'wb') as f:
    pickle.dump(pos, f)

重新加载是:

with open("graphLayout.txt", 'rb') as f:
    pos = pickle.load(f)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2017-09-13
    • 1970-01-01
    • 2021-08-17
    • 2020-03-03
    相关资源
    最近更新 更多