2011-12-05 70 views
0

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

如何生成一些节点颜色变化不大的同一图形?

+0

你是什么意思的“不同的图形”?请使用代码来显示您所想到的差异,而不是使用任意的图表操作。特别是,图形的不同随机布局不会显示出有意义的差异。 –

+0

它在图形中的随机位置生成2个额外的节点1和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

为您的案例存储节点位置数据的最简单方法可能是使用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) 
相关问题