2016年2月21日日曜日

Macでpython3の環境構築12---NetworkXの使い方3---

NetworkXには、ある種類のグラフを自動的に作る機能も備わっております。

道(path)

path_graph---NetworkX

道(path)とは、頂点を順番につないだグラフです。
nx.path_graph(n)でn頂点のpathが生成されます。ラベルは0〜n-1までが自動的につき、0〜n-1を順番につないだグラフになります。

例えば、4頂点のpathは次のようなコードになります。
import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.path_graph(4)        #4頂点のpath
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=15,width=2.0)
    
    pyplot.show()

if __name__ == '__main__':
    main()

これを実行すると
となります。

もし空のグラフを先に作成し、pathを追加するのであればこうなります。

import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
    
    g.add_path([1,2,3,4])          #4頂点のpath
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=15,width=2.0)
    
    pyplot.show()

if __name__ == '__main__':
    main()


星(star graph)


星とは一つの頂点にその他のノードがつながっているグラフです。
nx.star_graph(n)でn頂点の星が生成できます。ラベルは中心が0になりn-1まで自動的につきます。

例えば4頂点の星は次のようなコードになります。
import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.star_graph(4)    # 4頂点の星
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=15,width=2.0)
    
    pyplot.show()

if __name__ == '__main__':
    main()

これを実行すると、

となります。

もし先に空のグラフを作成し、星を追加するのであればこうなります。
import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
    
    g.add_star([1,2,3,4])   # 4頂点の星。この場合は引数は頂点のリスト(=自分で指定できる)
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=15,width=2.0)
    
    pyplot.show()

if __name__ == '__main__':
    main()



閉路グラフ(cycle graph)


閉路グラフとは、文字通り一つの閉路から成るグラフです。(閉路グラフ---Wikipedia)
nx.cycle_graph(n)でn頂点の閉グラフが生成できます。ラベルは0〜n-1でつきます。

例えば4頂点の閉路グラフは次のようなコードになります。
import networkx as nx

from matplotlib import pyplot

def main() :
    
    g =nx.cycle_graph(4)        #  4頂点の閉グラフ
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=15,width=2.0)
    
    pyplot.show()

if __name__ == '__main__':
    main()


これを実行すると、
となります。

もし先に空のグラフを作成し、閉グラフを追加するのであればこうなります。

import networkx as nx

from matplotlib import pyplot

def main() :
    g=nx.Graph()
    
    g.add_cycle([1,2,3,4])      #  4頂点の閉グラフ。この場合は、引数は頂点のリスト(=自分で指定できる)
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=15,width=2.0)
    
    pyplot.show()

if __name__ == '__main__':
    main()



完全グラフ(complete graph)

complete_graph---NetworkX

完全グラフとは、任意の二つのノードの間にエッジがあるグラフです。
nx.complete_graph(n)でn頂点の完全グラフが生成できます。ラベルは0〜n-1でつきます。

例えば4頂点の完全グラフは次のようなコードになります。
import networkx as nx

from matplotlib import pyplot

def main() :
    g =nx.complete_graph(4)      # 4頂点の完全グラフ
    
    nx.draw_networkx(g,pos=nx.spring_layout(g),node_size=500,font_size=15,width=2.0)
    
    pyplot.show()

if __name__ == '__main__':
    main()


これを実行すると、
となります。

n=5の場合は

n=6の場合は

となっていきます。

g.add_complete([リスト])という方法はできないようです。

それ以外にもあるクラスのグラフを自動的に作れるような機能がいろいろ備わっているようですが、勉強不足でそもそもなんのことをどんなグラフのことを意味しているのかわからないものがたくさん。
ランダムグラフとかいろいろあるっぽいです。

詳細は下の参考ページで確認ください。
参考にしたページや文献・書籍
Graph generators---NetworkX

0 件のコメント:

コメントを投稿