2011-12-05 2 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 피클을 사용하는 것일 수 있습니다. 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)