听说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) #绘制图形

最新文章

  1. ios-将代码创建的视图控件放入拖拽控件的下面
  2. SQLServer语句执行效率及性能测试
  3. Struts2例子
  4. 疯狂java学习笔记之面向对象(九) - 抽象和接口
  5. 给Testerhome测试小道消息做个硬广告
  6. Python学习笔记-Day1-Python基础
  7. JavaScript 开发规范要求详解
  8. PL/SQL中文显示都显示成“?”的问题
  9. Egret 学习之简介,环境搭建及命令行语法 (一)
  10. (中等) CF 585C Alice, Bob, Oranges and Apples,矩阵+辗转相除。
  11. 201521123002《Java程序设计》第14周学习总结
  12. Linxu指令--date,cal
  13. 百度地图api的用法
  14. 面向对象+canvas 倒计时
  15. RQNOJ 3 Jam的计数法
  16. Java8中的HashMap分析
  17. POJ 2773 Happy 2006------欧几里得 or 欧拉函数。
  18. linux命令总结之lsof命令
  19. Java并发编程原理与实战五:创建线程的多种方式
  20. ps aux命令解析

热门文章

  1. requirejs——基础
  2. axis调用webservice客户端开发
  3. 关于linux创建用户的有趣事情!
  4. 【原创】3. MYSQL++ Query类型与SQL语句执行过程(非template与SSQLS版本)
  5. 浏览器get请求到java后台的值是乱码
  6. codeforce 461DIV2 F题
  7. LoadRunner 脚本开发和常用函数
  8. 微信小程序怎么获取用户输入
  9. sql server 错误总结
  10. 7.python实现高效端口扫描器之nmap模块