networkxでグラフの可視化を行いたいです。
そこでpython-igraphのgreedy法によりコミュニティ抽出を行いました。
そのためコミュニティ抽出の結果を用いて可視化を行いたいです。
networkxを主に使っていてigraphの使い方をほとんどわかっていないためnetworkxを使った可視化が理想です。
python
1#convert networkx to igraph 2def create_igraph(ad):#Weighted Adjacency Matrix 3 ad = ad+ ad.T#directed -> undirected 4 ad = ad - np.diag(np.diag(ad)) 5 A = nx.from_numpy_array(np.array(ad)) 6 for i in list(A.node()): 7 if 0 == len(A.edges(i)): 8 A.remove_node(i) 9 nx.write_gml(A, 'graph.gml') 10 G = Graph.Read_GML('graph.gml') 11 return G
上のコードは重み付き隣接行列をigraphでグラフ化するものです。
python
1# Adj is 35×35 weighted adjacency matrix 2G = create_igraph(Adj) 3a = G.community_fastgreedy(weights='weight').as_clustering().membership 4print(a) 5#[0, 1, 2, 2, 0, 0, 2, 3, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0, 2, 2, 1, 2, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
networkxで可視化
python
1color = ['r', 'g', 'b', 'c'] 2G = G.to_networkx() 3node_color = [color[i] for i in a] 4nx.draw_networkx(G, node_color=node_color) 5plt.show()
このようにコミュニティごとには別れているように見えますがより別れているようにしたいです。
このようにノードが別れるのが理想です。
どのようにすればこのようにできるでしょうか
あなたの回答
tips
プレビュー