我使用networkx生成随机几何图形。我将所有节点和边缘信息导出到文件中。 我想通过从文件中导入所有节点和边缘信息来生成相同的图形。
导出节点值和边缘信息的代码。
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()
我正在尝试使用以下代码导出它并尝试更改某些节点的颜色。但它产生了不同的图形。
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()
如何生成相同的图形,但某些节点的颜色变化很小?
答案 0 :(得分:1)
如果我理解你遇到的问题,麻烦就在这里:
pos=nx.random_layout(G)
nx.draw_networkx_nodes(G,pos,nodelist=['1','2'],node_color='b')
nx.draw(G)
您可以在第一行创建图形的随机布局,并使用它在第二行中绘制节点'1'
和'2'
。然后,您可以在第三行中再次绘制图形而不指定位置,该位置使用弹簧模型来定位节点。
您的图表没有额外的节点,您只是在两个不同的位置绘制了两个节点。如果您想以相同的方式一致地绘制图形,则需要始终使用您计算的pos
。如果您希望在存储和重新加载后保持相同,那么也要保存pos
。
答案 1 :(得分:1)
为您的案例存储节点位置数据的最简单方法可能是使用Python pickles。 NetworkX有一个write_gpickle()函数,可以为您执行此操作。请注意,当您生成随机几何图形时,这些位置已经可用作节点属性,因此您可能希望在绘制时使用这些位置。以下是如何生成,保存,加载和绘制同一图表的示例。
In [1]: import networkx as nx
In [2]: G=nx.random_geometric_graph(10,0.5)
In [3]: pos = nx.get_node_attributes(G,'pos')
In [4]: nx.draw(G,pos)
In [5]: nx.write_gpickle(G,'rgg.gpl')
In [6]: H=nx.read_gpickle('rgg.gpl')
In [7]: pos = nx.get_node_attributes(H,'pos')
In [8]: nx.draw(H,pos)