2014-03-24 2 views
2

Networkx에 다른 정보가 들어있는 그래프가 있습니다. 그래프 노드는 다음과 같다 :NetworkX에서 그래프를 그려 플롯 영역을 3으로 나눕니다.

G = nx.DiGraph() 
G.add_node(shape1, level=1) 
G.add_node(shape2, level=2) 
G.add_node(shape3, level=2) 
G.add_node(shape4, level=3) 
... 

내가, 레벨 3의 모든 모양의 하부에 위치 플롯의 상단에 레벨 1의 모든 모양을하기 위해 그래프를 그리려 음모 및 레벨 2의 모든 도형을 중앙에 배치합니다. 최대 3 단계가 있습니다.

나는 NetworkX에서 문서화를 읽고,하지만 지금까지 내가 노드 만이 임의의 위치 사용 :

pos = nx.spring_layout(G) nx.draw(G, pos)합니다.

내가 원하는대로 그래프의 노드를 배치하는 더 현명한 방법을 알고 있습니까?

P.S : 원하는 출력은 대략 다음과 같이 될 것이다 : 나는 수준을 나누는 또한 선을 그릴 필요가 없습니다 enter image description here

, 나는 단지 내가 필요로 분명히 무엇을 만들어 넣어.

+0

무엇을 "가장자리에 공식화하지 않는다"무엇을 의미합니까? – Hooked

답변

5

"도트"레이아웃은 graphviz에 대한 인터페이스를 제공하므로 사용자가 원하는대로 할 수 있습니다. 당신이 제공 한이 간단한 그래프에서 작동하는 반면 더 복잡한 더 큰 그래프의 출력을 조정해야 할 수도 있습니다.

import networkx as nx 

G = nx.DiGraph() 
G.add_node(1,level=1) 
G.add_node(2,level=2) 
G.add_node(3,level=2) 
G.add_node(4,level=3) 

G.add_edge(1,2) 
G.add_edge(1,3) 
G.add_edge(2,4) 

import pylab as plt 
nx.draw_graphviz(G, node_size=1600, cmap=plt.cm.Blues, 
       node_color=range(len(G)), 
       prog='dot') 
plt.show() 

enter image description here

+0

도움에 감사드립니다. 이것은 도움이되었다. –

관련 문제