0

我正在使用 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()

如何在某些节点的颜色变化很小的情况下生成相同的图形?

4

2 回答 2

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

于 2011-12-05T09:15:15.773 回答
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)
于 2013-01-05T19:34:02.227 回答