読者です 読者をやめる 読者になる 読者になる

ぴろの狂人日記

2014年から頑張ってブログを継続しようと思います。「継続と習慣」を今年の目標にしたので、頑張って更新を続けようと思います。おいおいはレビューや数学や認知科学などについて記事を書いていければと思っています

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

python

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

道(path)

path_graph — NetworkX 1.10 documentation


道(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 1.10 documentation


完全グラフとは、任意の二つのノードの間にエッジがあるグラフです。
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 1.10 documentation