2014-11-27 3 views
0

NetworkX 라이브러리의 최단 경로에서 노드를 색칠하는 방법은 무엇입니까? 다른 색상으로 노드를 추가하는 방법을 찾았지만 임의의 그래프로 노드를 편집하는 방법을 모르겠습니다. 나는 그것이 다소 쉽다는 것을 상상할 수 있었지만, 나는이 부분을 문서에서 발견 할 수 없었다. 아래의 코드는 무작위 그래프를 생성하고 최단 경로를 계산해야합니다. 이것이 완벽하게 작동하면 그 경로를 어떻게 든 표시해야합니다.NetworkX 경로의 노드 색을 지정하십시오.

import networkx as nx 
import matplotlib.pyplot as plt 

G = nx.fast_gnp_random_graph(20, 0.14, seed="303", directed=False) 

shortestPath = nx.shortest_path(G, source=G.nodes()[10], target=G.nodes()[0], weight="10") 
node = G.graph.get(0) 

print(shortestPath) 
nx.draw(G) 
plt.savefig("path.png") 
plt.show() 

답변

1

networkx.draw_networkx_nodes을 사용하여 그래프의 노드 색상을 변경할 수 있습니다. 노드 당 하나씩 draw_networkx_nodes에 색상 목록을 제공하여 노드를 색 다르게 색칠 할 수 있습니다.

node_colors = ["blue" if n in shortestPath else "red" for n in G.nodes()] 

을 다음 방금 (I이 예제의 spring_layout을 사용하고 있습니다) 그래프에 대한 레이아웃을 만든 다음 그래프를 그릴 필요, 다음과 같이 귀하의 경우에, 당신은 node_colors 목록을 만들 수 있습니다 :

pos = nx.spring_layout(G) 
nx.draw_networkx_nodes(G, pos=pos, node_color=node_colors) 
nx.draw_networkx_edges(G, pos=pos) 

graph

+0

감사합니다! 나는 또한 draw_networkx_nodes/edges를 찾았고, 나는 가장자리에 무게를 주면서 끝냈다. 그러나 당신의 예제는 훨씬 더 명확하다. :) 또한 pos는 노드의 위치와 가장자리가 아니기 때문에, 이제는 무게를주기 위해 pos를 변환했다. 가장자리까지. – pirelius

관련 문제