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

时间: 2024-10-02 21:21:33

NetworkX初相识的相关文章

爪哇国新游记之十----异常初相识

import java.util.ArrayList; import java.util.List; public class A{ private int[] arr=new int[3]; private List<String> ls; public A(){ ls=new ArrayList<String>(); ls.add("12"); } public int getArrValue(int i){ return arr[i]; } public

与君初相识,犹如故人归

与君初相识, 犹如故人归, 天涯明月新, 朝暮最相思. 这首云南茶花烟上的小诗最好的反映了我们组员之间的默契.四个来自不同本科学校的妹砸,经过了考研的磨炼,相聚于北洋,开始了两年半的研究生学习生活.我们希望在天大软件学院这个环境中共同成长,共同进步,争取都成为技术大神!此博客用来记录我们的成长轨迹与经历~现在先隆重欢迎小组成员闪亮登场~ No.1 孙雪莹 静如处子,动若疯兔的IT女.喜欢音乐,运动(各种音乐,各种运动). 有点迷糊(有点逗逼,晓丽评),少部分强迫症. 喜欢编程,但渣渣的编程之路一

初相识|performance_schema全方位介绍

初相识|performance_schema全方位介绍 |导 语 很久之前,当我还在尝试着系统地学习performance_schema的时候,通过在网上各种搜索资料进行学习,但很遗憾,学习的效果并不是很明显,很多标称类似 "深入浅出performance_schema" 的文章,基本上都是那种动不动就贴源码的风格,然后深入了之后却出不来了.对系统学习performance_schema的作用甚微. 现在,很高兴的告诉大家,我们基于 MySQL 官方文档加上我们的验证,整理了一份可以系

NodeJs初相识

一.nodeJs简介 1.Node 是一个服务器端 JavaScript 解释器. 2.Node 的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个物理机的连接代码.处理高并发和异步I/O是Node受到开发人员的关注的原因之一. 3.Node 本身运行Google V8 JavaScript引擎,所以速度和性能非常好,而且Node对其封装的同时还改进了其处理二进制数据的能力.因此,Node不仅仅简单的使用了V8,还对其进行了优化,使其在各种环境下更加给力. 4.第三方的

PHP初相识

1.什么是PHP? PHP全称PHP:Hypertext Preprocessor, 是一种运行在服务器上的开源脚本语言. 那么什么是脚本语言? 脚本语言的对立面不是高级编程语言,它也是编程语言的一种.脚本语言和"非脚本语言"的可以看做"解析型语言"和"编译型语言"的区别:编译型语言会在运行之前针对具体平台将代码编译链接成可执行的机器码:解析型语言直到运行时才逐行编译执行. 2.PHP语言结构: PHP从下到上可分为4层体系: ① Zend引擎:

webstorm初相识

虽说这些答案都是百度来的,但我还是要把他整理在一起,等将来有了自己的理解,再来补充. 一.webstorm和dreamweaver的区别?哪个更好? webstorm强大的地方有: 1. 对js的开发有长足的支持,那些自动提示,代码主题,调试之类的我就不说了,主要是对流行技术的支持,比如Node.js,less,sass,jq,ext,prototype等框架的支持 .2. 自身对插件的支持,主要体现在webstorm 2.0以后就已经包涵了zencoding了,而如果dw不是完整版的话,zen

Java 初相识

Java是如何出现的呢?这就要回到1991年,那时候随着单片机的发展,出现了很多微型的系统,Sun公司在这个时候就成立的一个项目组,成员就有我们熟知的"Java之父" 詹姆斯·高斯林,起初的目标是为了占领计算机在家电产品上的嵌入式应用这个市场.首选的开发语言是C++,但是在具体的开发中,发现有写需求是C++不能满足的,比方说,跨平台(一个家电中可能包含多个厂商的芯片),还有就是C++系统过于庞大,而硬件资源有限.为了满足自己的需求,就在C++的基础上开发了Oak(Java的前身)语言.

Map - 与君初相识

前言 生活中,我们常会看到这样一种集合:IP地址与主机名,身份证号与个人等,这种一 一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对应关系的对象,即 java.util.Map 接口. Map 接口下的集合与 Collection 接口下的集合,它们存储数据的形式不同,Collection 接口定义了单列集合规范,每次存储一个元素:而Map接口定了的是双列集合的规范,每次存储一对元素. Collection 中的集合,元素是孤立存在的(单身狗),向集合中存储元素采用一个个元素的

Node.js 网页瘸腿爬虫初体验

延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器和客户端功能 var http=require("http"); // 内置文件处理模块 var fs=require('fs'); // 创建一个将流数据写入文件的WriteStream对象 var outstream=fs.createWriteStream('./1.txt'); /