지난 포스팅에서는 networkx에서 네트워크에 edge와 node를 추가하는 것을 작성했다.
이번 포스팅에서는 그래프를 구성하는 노드들의 위치를 설정하는 방법을 작성해보려고 한다.
아래코드는 지난번 포스팅에서 작성했던 코드로, 코드를 실행할때마다 노드들의 위치가 계속해서 변경된다.
g1 = nx.Graph() # 무방향성 그래프 g1을 생성
g1.add_nodes_from([1,2,3,4,5]) # 생성한 g1그래프에 노드 1을 생성(추가)
g1.add_edges_from([(1,2), (2,3), (1,5), (3,5), (4,5)]) # 생성한 g1그래프에 edge를 생성(추가)
g1.add_edge(1,3, weight=3) # node1,3을 연결하는 edge의 weight를 3으로 설정
g1.add_weighted_edges_from([(1,2,3),(2,3,4)]) # node 1,2을 연결하는 edge의 weight를 3으로 설정
# node 2,3을 연결하는 edge의 weight를 4으로 설정
pos = nx.spring_layout(g1) # 네트워크에서 노드들의 위치를 결정하는 코드임.
labels =nx.get_edge_attributes(g1,'weight'). # labels을 edge의 weight로 정의
nx.draw_networkx_edge_labels(g1, pos, edge_labels = labels) # label을 표시 그래프에 표시
nx.draw(g1, pos, with_labels=True) # 그래프를 그림
하지만 위의 코드에 몇문장을 더 추가하면 노드들의 위치를 사용자가 지정할 수 있다. 먼저 코드를 먼저 살펴보고 난 이후
천천히 설명해보겠다.
g1 = nx.Graph() # 무방향성 그래프 g1을 생성
g1.add_nodes_from([1,2,3,4,5]) # 생성한 g1그래프에 노드 1을 생성(추가)
g1.add_edges_from([(1,2), (2,3), (1,5), (3,5), (4,5)]) # 생성한 g1그래프에 노드 1,2,3,4,5를 생성(추가)
g1.add_edge(1,3, weight=3) # node1,3을 연결하는 edge의 weight를 3으로 설정
g1.add_weighted_edges_from([(1,2,3),(2,3,4)]) # node 1,2을 연결하는 edge의 weight를 3으로 설정
# node 2,3을 연결하는 edge의 weight를 4으로 설정
pos = {1:[1,13], 2:[2,3], 3:[3,4], 4:[4,5], 5:[6,7]} # 노드 1의 좌표를 x축 1, y축 13, 노드2의 좌표를 x축 2, y축 3
labels =nx.get_edge_attributes(g1,'weight'). # labels을 edge의 weight로 정의
nx.draw_networkx_edge_labels(g1, pos, edge_labels = labels) # label을 표시 그래프에 표시
nx.draw(g1, pos, with_labels=True) # 그래프를 그림
위에서 파란색 문장이 새롭게 추가된 코드이다. 해당 코드는 이렇게 설명할 수 있다.
pos라는 dictionary의 key를 노드이름, 그리고 value를 x,y좌표의 리스트로 설정한 것이다.
그냥 쉽게 pos = {노드이름 : [x축, y축]} 이렇게 이해하면 될 것이다.
아래 코드는 또다른 예제이며, 출력시 아래의 그림과 같이 그래프가 생성된다.
g2 = nx.Graph()
for i in range(0,26):
g2.add_node(i)
pos = {}
for i in range(0,10):
pos.update({i:[i,5*i]})
for i in range(10,20):
pos.update({i:[i,-5*i+95]})
for i in range(20,26):
pos.update({i:[2*i-35,20]})
nx.draw(g2, pos, with_labels=True)
'Python' 카테고리의 다른 글
파이썬 내장함수 (0) | 2022.01.22 |
---|---|
딕셔너리(Dictionary) 사용법 정리 (0) | 2022.01.17 |
파이썬 리스트(list) 사용법 정리 (0) | 2022.01.15 |
파이썬 Networkx (node와 edge 제거) (0) | 2022.01.07 |
파이썬 Networkx (node, edge 생성) (0) | 2022.01.04 |