python 學習筆記2 –畫圖(networkx)

NO IMAGE

networkX tutorial

繪製基本網路圖
繪製劃分後的社群


繪製基本網路圖

用matplotlib繪製網路圖
基本流程:
1. 匯入networkx,matplotlib包
2. 建立網路
3. 繪製網路 nx.draw()
4. 建立佈局 pos = nx.spring_layout美化作用
最基本畫圖程式

import import networkx as nx             #匯入networkx包
import matplotlib.pyplot as plt 
G = nx.random_graphs.barabasi_albert_graph(100,1)   #生成一個BA無標度網路G
nx.draw(G)                               #繪製網路G
plt.savefig("ba.png")           #輸出方式1: 將影象存為一個png格式的圖片檔案
plt.show()                            #輸出方式2: 在視窗中顯示這幅影象 


networkx 提供畫圖的函式有:

draw

建立佈局,對圖進行佈局美化,networkx 提供的佈局方式有:
– circular_layout:節點在一個圓環上均勻分佈
– random_layout:節點隨機分佈
– shell_layout:節點在同心圓上分佈
– spring_layout: 用Fruchterman-Reingold演算法排列節點(這個演算法我不瞭解,樣子類似多中心放射狀)
– spectral_layout:根據圖的拉普拉斯特徵向量排列節
佈局也可用pos引數指定,例如,nx.draw(G, pos = spring_layout(G)) 這樣指定了networkx上以中心放射狀分佈.

繪製劃分後的社群

先看一段程式碼,程式碼源自site

partition = community.best_partition(User)
size = float(len(set(partition.values())))
pos = nx.spring_layout(G)
count = 0.
for com in set(partition.values()) :
count = count   1.
list_nodes = [nodes for nodes in partition.keys()
if partition[nodes] == com]                 
nx.draw_networkx_nodes(G, pos, list_nodes, node_size = 50,
node_color = str(count / size))
nx.draw_networkx_edges(User,pos,with_labels = True, alpha=0.5 )
plt.show()

communit.best_partition 是社群劃分方法,演算法是根據Vincent D.Blondel 等人於2008提出,是基於modularity optimization的heuristic方法.
partition的結果存在字典資料型別:
{'1': 0, '3': 1, '2': 0, '5': 1, '4': 0, '6': 0}

每次迴圈list_nodes結果是社群i對應的使用者編號。
如第一次迴圈結果是com = 0, list_nodes= [‘1′,’2′,’4′,’6’]
第二次迴圈的結果是com = 1, list_nodes = [‘3′,’6’]
這樣每次迴圈,畫出一個社群的所有節點:

 nx.draw_networkx_nodes(G, pos, list_nodes, node_size = 50,
node_color = str(count / size))

迴圈結束後通過顏色來標識不同社群