Networkx:使用节点值和边信息导入图形

时间:2011-12-05 08:59:00

标签: networkx

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

如何生成相同的图形,但某些节点的颜色变化很小?

2 个答案:

答案 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)