2013년 5월 21일 화요일

[python] networkx 를 활용해 그래프 그리기


파이썬을 이용해 그래프를 구현하는 방법에는 igraph, networkx 등이 있지만 그 중에서

networkx 모듈을 활용해 그래프를 그리는 예제를 공유하고자 한다.

그래프를 시각화 하기 위해서는matplotlib 이 필요하다.
import networkx as nx
import matplotlib.pyplot as plt

def draw_graph(graph):

    # graph 객체에서 노드들을 뽑아 nodes 에 저장한다
    nodes = set([n1 for n1, n2 in graph] + [n2 for n1, n2 in graph])

    # 그래프 객체를 하나 만든다
    G=nx.Graph()

    # add_node() 를 통해 그래프에 노드를 입력한다
    for node in nodes:
        G.add_node(node)

    # add_edges() 를 통해 노드간의 엣지를 지정해 준다
    for edge in graph:
        G.add_edge(edge[0], edge[1])

    # 그리려는 그래프의 속성을 설정해 준다
    nx.draw_networkx_nodes(G,pos,node_size=5)
    nx.draw_networkx_edges(G,pos,width=1)
    nx.draw_networkx_labels(G,pos,font_size=10,font_family='sans-serif')

    # 그래프 그림을 파일로 저장한다
    plt.axis('off')
    plt.savefig("graph.png", dpi=1000) # 그림 파일 크기 지정
    plt.savefig("weighted_graph.png") # png 파일로 저장

    # 그래프 레이아웃을 저장한다
    pos = nx.shell_layout(G)
    nx.draw(G, pos)

    # matplotlib 모듈을 이용해 그래프를 시각화 한다.
    plt.show()

# 그리고자 하는 그래프 예제
graph = [(20, 21),(21, 22),(22, 23), (23, 24),(24, 25), (25, 20)]
draw_graph(graph)


참고 : https://www.udacity.com/wiki/creating%20network%20graphs%20with%20python

댓글 없음:

댓글 쓰기