あなたの質問は肯定的ではありません。私は答えに起動する前に、networkxの描画ドキュメントはここにあるあなたが「どのように私はいくつかのノードを入れてnetworkx得るのですか一緒に閉じて」求めている
を考える:http://networkx.lanl.gov/reference/drawing.html
あなたが求めているので、その数字およそ4つの異なるコミュニティがあり、それぞれのコミュニティ内に多くのエッジを持ち、多くの外部には存在しません。
spring_layoutは、しっかりと編み組んだコミュニティをまとめるのに適しています。 spring_layoutの基本的なアルゴリズムは、あたかもエッジがスプリングであるかのように動作します(ノードははじきます)。したがって、多くのエッジがノードを密接に保ちます。位置がランダムに初期化されるので、異なる出力が得られるたびに注意してください。
これを行うための最も簡単な方法は、ちょうど
nx.draw_spring(G)
ですが、多分あなたはもっと欲しいです。必要に応じて、すべての単一ノードの位置を修正できます。通常はposというdictを定義します。
pos = {}
for node in G.nodes_iter():
pos[node] = (xcoord, ycoord).
ここで、xcoordとycoordは、ノードを配置する座標です。
は、それからちょうど、多くの場合、多くの労力だ draw_networkx(G、POS = POS)
を行います。だから、時にはあなたはそれらのいくつかは、特定の場所にする必要がそれを教えてくれ、とnetworkx残り
は、少数のノードに対してfixedposを定義して、固定され、それがようfixedpos与えているかのノードにそれを伝える spring_layout を実行してみましょう最初の位置。それは固定され、それらの周りに他のものに収まるものを保持します。
ここでは、4つの完全に接続された部分とそれらの間にいくつかの他のエッジがあるネットワークを生成するいくつかのコードです。 (実際には完全なネットワークを生成し、これらの部分間のエッジを除くすべてを削除します)。単純なスプリングレイアウトで描画します。次に、それらのうちの4つを正方形の角に固定し、他のノードをその固定位置の周りに配置します。
import networkx as nx
import random
import pylab as py
from math import floor
G = nx.complete_graph(20)
for edge in G.edges():
if floor(edge[0]/5.)!=floor(edge[1]/5.):
if random.random()<0.95:
G.remove_edge(edge[0],edge[1])
nx.draw_spring(G)
py.show()
fixedpos = {1:(0,0), 6:(1,1), 11:(1,0), 16:(0,1)}
pos = nx.spring_layout(G, fixed = fixedpos.keys(), pos = fixedpos)
nx.draw_networkx(G, pos=pos)
py.show()
また、エッジに重みを指定spring_layoutする重みを渡すと、より大きな重みが互いに接近して対応するノードを保つためにそれを教えてくれますすることができます。したがって、コミュニティを特定したら、必要に応じてコミュニティ/クラスタ内の重みを増やして、それらを互いに近づけてください。
各ノードを作成する色を指定することもできますので、各コミュニティ/クラスタの色を指定することは簡単です。
これらの各クラスタの周りにカーブを描きたい場合は、matplotlibを使用してカーブを描く必要があります。