networkx是python的一个第三方包,可以方便地调用各种图算法的计算。
通过调用python画图包matplotlib能实现图的可视化。

1.安装

正好整理一下python第三方包的安装方法。

setuptools

使用setuptools包,我们能够手动下载,安装第三方包。
使用方式:
下载第三方包源文件,在setup.py目录下执行

``` python XX install ```

easy_install

easy_install工具,自动化地根据第三方包的名称,一键联网搜索,下载并且调用setuptools安装。
使用方式:
上网下载ez_setup.py文件,执行
python ez_setup.py安装setuptools工具。
执行

``` easy_install SQLObject ```

安装第三方包

pip

与easy_install类似,根据名称一键下载,调用setuptools安装。pip是可以看作是easy_install的升级版。
使用方式:
先下载get-pip.py文件
运行python get-pip.py,自动安装,包括setuptools在内的包
使用:

```
pip install simplejson --安装包
pip install --upgrade simplejson --升级包
pip uninstall simplejson --卸载包
```

使用setuptools自助下载安装,经常会遇到包确实,没有制定编译器等等各种问题而导致安装失败。所以使用easy_install或者pip是比较方便的选择。

安装networkx

安装networkx之前要安装画图工具matplotlib,以及矩阵运算工具numpy,于是我们执行:
pip install numpy
pip install matplotlib
pip install networkx
安装完成。

2.使用

networkx的英文版说明可以在其官方网站上下载得到,写的简单易懂。
这里记录下一些简单的建图方法。
在networkx中,图以对象的形式提供接口。
在图对象中,还有点,边等也是以对象形式提供,画图则调用matplotlib的函数完成。

**建图 **

networkx可以建立简单无向图graph,有向图digraph,可重复边的multi-graph。
import networkx as nx
G=nx.Graph()
D=nx.DiGraph()
M=nx.MultiGraph()

这里的点可以是任意可区分的对象(hashable),比如数字,字符串,对象等。
G.add_node(1)
G.add_node('first_node')
#这里用一个对象多为key来唯一区别一个点
#我们还能够用一个列表来批量加入点
G.add_nodes_from([1,2,3])
#还可以用一个图对象作为点,嵌入到其他图中
G.add_node(D) #这里D作为一个点的key
#或者把一个图的所有点赋予另一个图
G.add_nodes_from(D) #这里返回D的所有点,赋予G
#与加入相同的传递方法,我们也可以删除点
G.remove_node(1)
G.remove_nodes_from([1,2,3])

这里的边可以使用两个单独的对象作为输入
G.add_edge(1,2) #表示1,2之间有一条边。
#如果不存在点1,2,则会自动加入点集合。
#或者以元组的形式作为输入
e=(1,2)
G.add_edge(*e)
#这里的*代表吧元组解包(unpack),当作一个个的值扔到函数中去。
#如果不解包,等价于
#G.add_edge(e)=G.add_edge((1,2))与参数传递的方式不符。
#类似的,我们还可以使用包含元组的列表来传递参数
G.add_edges_from([(1,2),(2,3)])
#我们还可以报一个图的边赋予另一个图
G.add_edges_from(H)
#删除
G.remove_edge(1,2)
G.remove_edges_from([(1,2),(2,3)])</pre></div>

访问

node_list = G.nodes()
edge_list = G.edges()
#可以返回包含点与边的列表
node = G.node[‘first_node’]
#如上根据key返回点
edge = G.edge['first_node']['second_node']
#同样的方法,返回两个key之间的边</pre></div>

属性

我们可以给图,点,边赋予各种属性,最简单的就是权值属性
G.add_node(1,time='5pm')
#在添加时跟上属性
G.add_nodes_from([1,2,3],time='5pm')
#批量添加点是,跟上统一的属性
G.add_nodes_from([(3,{'time':'5pm'}), (4,{'time':'4pm'})])
#或者写成元组列表[(key,dict),(key,dict)]的形式
G.node[1]['time']
#根据字典key访问属性值。 #给边添加属性也类似
G.add_edge(1,2,time='3am')
G.add_edges_from([(1,2,{'time'='5pm'}),(2,3,{'time'=3am})])
#批量赋予属性
G.edge[1][2][‘time’]
#访问 #我们还可以使用特定的函数批量返回属性,如
time = nx.get_edge_attributes(G,'time')
#返回得到以元组为key,time属性为值得一个字典
time[(1,2)]</pre></div>

图算法

nx.connected_components(G)
#返回列表形式的G的全连通分量,每个分量一个子列表
类似的,networkx还提供各种图算法,具体可见官方文档。

画图

nx.draw(G) #画出图G
matplotlib.show() #显示出来
我们使用连通分量算法,并画出一个简单的图如下:
networkx的默认属性效果并不好,我们根据文档提供的借口设置合适的属性,才能得到合适的图。
networkx提供图的点位置,大小,颜色,形状,边的颜色,类型等属性可设置。

[Python] networkx入门 转的更多相关文章

  1. Python 正则表达式入门(中级篇)

    Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...

  2. Python 正则表达式入门(初级篇)

    Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写. 转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达 ...

  3. Python爬虫入门一之综述

    大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章作为参考,也欢迎大家一共分享学习经验. Pyth ...

  4. 【python】入门学习(十)

    #入门学习系列的内容均是在学习<Python编程入门(第3版)>时的学习笔记 统计一个文本文档的信息,并输出出现频率最高的10个单词 #text.py #保留的字符 keep = {'a' ...

  5. Python开发入门与实战1-开发环境

    1.搭建Python Django开发环境 1.1.Python运行环境安装 Python官网:http://www.python.org/ Python最新源码,二进制文档,新闻资讯等可以在Pyth ...

  6. Python基础入门教程

    Python基础入门教程 Python基础教程 Python 简介 Python环境搭建 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 Python 循 ...

  7. Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级

    前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问 ...

  8. python爬虫入门-开发环境与小例子

    python爬虫入门 开发环境 ubuntu 16.04 sublime pycharm requests库 requests库安装: sudo pip install requests 第一个例子 ...

  9. Python爬虫入门教程 48-100 使用mitmdump抓取手机惠农APP-手机APP爬虫部分

    1. 爬取前的分析 mitmdump是mitmproxy的命令行接口,比Fiddler.Charles等工具方便的地方是它可以对接Python脚本. 有了它我们可以不用手动截获和分析HTTP请求和响应 ...

随机推荐

  1. 1816647 - Error "Data file of SAP Note is incomplete" uploading a note in SNOTE

    ymptom When uploading an SAP Note in transaction SNOTE you receive the error "Data file of SAP ...

  2. js:作用域总结1

    先说几个概念: 1.js代码从上往下执行 2.变量提升: 变量提升是浏览器的一个功能,在运行js代码之前,浏览器会给js一个全局作用域叫window,window分两个模块,一个叫内存模块,一个叫运行 ...

  3. 移动平台MOBA发热与帧率优化

    MOBA项目的优化进入到了第二阶段,千元机,发热严重问题处理,及帧率进一步提升. 回顾之前的优化,当初我的 OPPO R9S不过8-10帧,后来经过了逻辑计算的一些优化后达到10-20帧. 再后来开启 ...

  4. ubuntu 从零安装tf-serving环境和opencv

    参考官网:https://www.tensorflow.org/serving/setup 首先是安装gprc: pip install grpcio 然后发现没有安装pip,报错:sudo: pip ...

  5. 初学c# -- c#创建开机自启服调用外部交互式exe文件

    在c#创建的开机自启动服务里,调用外部可执行文件有以下问题:1.带窗口的交互式的exe文件调用后,实际并没有被执行:2.服务是随windows启动的,服务启动后可能windows桌面还没出来,会报错误 ...

  6. Oracle修改表结构字段名和字段长度

    添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….); 修改字段的语法:alter ...

  7. SSM框架整合的其它方式

    ---------------------siwuxie095                                 SSM 框架整合的其它方式         1.主要是整合 Spring ...

  8. Solidity合约间的调用 -Solidity通过合约转ERC20代币

    Solidity通过合约转ERC20代币   ERC20代币并不能像Ether一样使用sendTo.transfer(amt)来转账,ERC20代币只能通过token中定义的transfer方法来转账 ...

  9. zabbix3.x自动发现主机

    在服务器比较多的情况下,配置加入群组,添加模板是非常费时费力的,所以利用自动发现主机.自动添加群组和模板是非常好的办法. 两步走 1.配置发现规则 2.配置发现动作 1.前提在服务器是上部署了agen ...

  10. HTML第二篇

    1>压缩文件格式:使用.zip格式较好 2>charset(字符集)  国内最新字符集格式为:gb18030   国际上通用的字符集是:UTF-8 3>添加图片 <img sr ...