networkxを用いた重み付きグラフの描画
概要
以前,Dijkstra法のpythonでの実装 - このくにのかたち(物理)を書いたとき,わかりやすいようにネットワーク図を描いたのです.パワーポイントで.図とテキストボックスを組み合わせてコツコツと.
その手間もちょっとアホらしかったので,networkxとmatplotlibを用いて,ネットワーク図(グラフ)を描画するプログラムを描いてみました.
コード
# coding: utf-8 #おまじない import networkx as nx import matplotlib.pyplot as plt #新規グラフを作成 #G = nx.Graph() #無向グラフ G = nx.DiGraph() #有向グラフ #ノードを追加 G.add_node(1) G.add_nodes_from([1,2,3,4,5,6]) pos = {1:(0,0),2:(1,1),3:(1,-1),4:(2,1),5:(2,-1),6:(3,0)} #ノードの座標を設定 #エッジを追加 G.add_weighted_edges_from([ (1,2,30), (1,3,25), (2,3,40), (2,4,35), (3,5,15), (4,6,45), (5,4,10), (5,6,40) ]) #(始点,終点,重み)でエッジを設定 edge_labels = {(i, j): w['weight'] for i, j, w in G.edges(data=True)} #エッジラベルの描画時に'weight'の表示を無くすための工夫 #◆図の描画 nx.draw_networkx_nodes(G, pos, node_size=500, node_color='white',edgecolors='black') #ノードを描画 nx.draw_networkx_edges(G, pos, width=1) #エッジを描画 nx.draw_networkx_labels(G, pos) #(ノードの)ラベルを描画 nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels) #エッジのラベルを描画 plt.show()
出力
きれいに出力されました.
これでパワーポイントとはおさらばですね.