NetworkX初相識


聽說NetworkX是一個很牛的復雜網絡研究的工具,就來試一下吧。

import networkx as nx

G= nx.Graph()#建立一個空白的圖

G.add_node("node1")#增加一個叫node1的節點

G.add_node(1)

G.add_node(2)#增加兩個叫做1,2的節點

G.add_edge(1,2)#增加一個連接節點1,2的邊

print(G.nodes())#打印圖G的節點

print(G.edges())#打印圖G的邊

nx.draw(G)#繪制圖G的圖像

得到一個這樣的圖像,點里面沒有顯示節點的名稱。怎樣才能顯示節點名稱呢?

參考nx.draw()方法。

nx.draw(G,with_lables = True)#節點是否帶標簽

還有一些其他的細節問題,如標簽顏色,字體大小,透明度等等,詳細內容參考:http://www.cnblogs.com/forstudy/archive/2012/03/20/2408125.html


 

NetworkX提供了4種常見網絡的建模方法,分別是:規則圖,ER隨機圖,WS小世界網絡和BA無標度網絡。

本文首先介紹在NetworkX生成這些網絡模型的方法,然后以BA無標度網絡的建模為例,分析利用NetworkX進行復雜網絡演化模型設計的基本思路,以便將來開發出我們自己的模型。

參考網址:http://blog.sina.com.cn/s/blog_720448d301018px7.html

http://www.cnblogs.com/forstudy/archive/2012/03/20/2407954.html

1.規則圖

在NetworkX中,用random_graphs.random_regular_graph(d, n)方法可以生成一個含有n個節點,每個節點有d個鄰居節點的規則圖。下面是一段示例代碼,生成了包含20個節點、每個節點有3個鄰居的規則圖:

首先運行ipython --pylab 
import
networkx as nx #import matplotlib.pyplot as plt RG = nx.random_graphs.random_regular_graph(3,20) #生成包含20個節點、每個節點有3個鄰居的規則圖RG pos = nx.spectral_layout(RG) #定義一個布局,此處采用了spectral布局方式,后變還會介紹其它布局方式,注意圖形上的區別 nx.draw(RG,pos,with_labels=False,node_size = 30) #繪制規則圖的圖形,with_labels決定節點是非帶標簽(編號),node_size是節點的直徑 #plt.show() #顯示圖形

 

運行結果如下:

 

2.ER隨機圖

ER隨機圖是早期研究得比較多的一類“復雜”網絡,這個模型的基本思想是以概率p連接N個節點中的每一對節點。在NetworkX中,可以用random_graphs.erdos_renyi_graph(n,p)方法生成一個含有n個節點、以概率p連接的ER隨機圖:

首先運行ipython --pylab,或者把第二行和最后一行的注釋去掉
import networkx as nx
#import matplotlib.pyplot as plt
ER = nx.random_graphs.erdos_renyi_graph(20,0.2)  #生成包含20個節點、以概率0.2連接的隨機圖
pos = nx.shell_layout(ER)          #定義一個布局,此處采用了shell布局方式
nx.draw(ER,pos,with_labels=True) 
#plt.show()

 

運行結果:

3.WS小世界模型

import networkx as nx
WS = nx.random_graphs.watts_strogatz_graph(20,4,0.3)  #生成包含20個節點、每個節點4個近鄰、隨機化重連概率為0.3的小世界網絡
pos = nx.circular_layout(WS)          #定義一個布局,此處采用了circular布局方式
nx.draw(WS,pos,with_labels=False,node_size = 30)  #繪制圖形

4.BA 無標度網絡

在NetworkX中,可以用random_graphs.barabasi_albert_graph(n, m)方法生成一個含有n個節點、每次加入m條邊的BA無標度網絡,下面是一個例子:

import networkx as nx
BA= nx.random_graphs.barabasi_albert_graph(20,1)  #生成n=20、m=1的BA無標度網絡
pos = nx.spring_layout(BA)          #定義一個布局,此處采用了spring布局方式
nx.draw(BA,pos,with_labels=False,node_size = 30)  #繪制圖形

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM