如何使用Python的python networkx 画图模块来生成节点列表完全连通子图

几个重要GIS-Python模块
随着ESRI提供了关于python模块的自动化制图的支持,python逐渐被更多GIS人员所熟悉,而下面几个Python模块是除ESRI arcpy以外需了解下的,在工作过程中,有时候可以给我们带来很多方便。下面就几个国外常用的记录下。主要包括:GDAL, numpy, NetworkX。
GDAL应该是所有GISer所熟悉的一个类库,在ESRI中我们也可以见到它的身影。而且尤其当我们电脑上没有任何GIS软件时,这个个更是可以当一个小的GIS工具来使用。另其实还有OGR,习惯都叫到一起了。GDAL负责栅格数据的读取,而OGR负责栅格数据的读取。下面为常用例子:.
import gdal
from gdalconst import *
# Open the raster dataset
dataset = gdal.Open(filename, GA_ReadOnly)
# Print the projection of the data
print dataset.GetProjection()
数值运算的时候一定少不了这个numpy,在操作栅格数据等,这个更是缺少不了。
from numpy import *
# Sample IO Table data
ioSample = [[1,2], [3,4]]
# Turn into a numpy array
ioMatrix = array(ioSample)
# Find the inverse of ioMatrix
ioMatrixInv = linalg.inv(ioMatrix)
GIS的网络分析是比较复杂的一个事情,而NetworkX则就是基于python提供的一个创建、操作、维护网络管理的一个类库,通过他我们可以方便地创建管理自己的网络信息。
import networkx as nx
# Create a graph
g = nx.Graph()
# Populate the graph
g.add_node(1)
g.add_node(2)
g.add_node(3)
# Create edges
g.add_edge(1,2)
g.add_edge(1,3)
# Print the neighbors of node 1 (returns 2)
print g.neighbors(1)
本文固定链接:
【上一篇】【下一篇】
您可能还会对这些文章感兴趣!
- 14,409 浏览数
- 9,129 浏览数
- 8,262 浏览数
- 7,546 浏览数
- 7,484 浏览数
- 5,133 浏览数
- 4,236 浏览数
- 4,193 浏览数
- 3,398 浏览数
- 3,159 浏览数
日志总数:66 篇
评论总数:28 篇
标签数量:124 个
链接总数:6 个
建站日期:
运行天数:1673 天
最后更新:python 学习笔记2 --画图(networkx) - 推酷
python 学习笔记2 --画图(networkx)
绘制基本网络图
绘制划分后的社区
绘制基本网络图
用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 提供画图的函数有:
(G,[pos,ax,hold])
draw_networkx
(G,[pos,with_labels])
draw_networkx_nodes
(G,pos,[nodelist]) 绘制网络G的节点图
draw_networkx_edges
(G,pos[edgelist]) 绘制网络G的边图
draw_networkx_edge_labels
(G, pos[, ...]) 绘制网络G的边图,边有label
---有layout 布局画图函数的分界线---
draw_circular(G, **kwargs)
Draw the graph G with a circular layout.
draw_random(G, **kwargs)
Draw the graph G with a random layout.
draw_spectral(G, **kwargs)
Draw the graph G with a spectral layout.
draw_spring(G, **kwargs)
Draw the graph G with a spring layout.
draw_shell(G, **kwargs)
Draw networkx graph with shell layout.
draw_graphviz(G[, prog])
Draw networkx graph with graphviz layout.
networkx 画图参数:
: 指定节点的尺寸大小(默认是300,单位未知,就是上图中那么大的点)
node_color
: 指定节点的颜色 (默认是红色,可以用字符串简单标识颜色,例如'r'为红色,'b'为绿色等,具体可查看手册),用“数据字典”赋值的时候必须对字典取值(.values())后再赋值
node_shape
: 节点的形状(默认是圆形,用字符串'o'标识,具体可查看手册)
: 透明度 (默认是1.0,不透明,0为完全透明)
: 边的宽度 (默认为1.0)
edge_color
: 边的颜色(默认为黑色)
: 边的样式(默认为实现,可选: solid|dashed|dotted,dashdot)
with_labels
: 节点是否带标签(默认为True)
: 节点标签字体大小 (默认为12)
font_color
: 节点标签字体颜色(默认为黑色)
e.g. nx.draw(G,node_size = 30, with_label = False)
绘制节点的尺寸为30,不带标签的网络图。
布局指定节点排列形式
pos = nx.spring_layout
建立布局,对图进行布局美化,networkx 提供的布局方式有:
- circular_layout:节点在一个圆环上均匀分布
- random_layout:节点随机分布
- shell_layout:节点在同心圆上分布
- spring_layout: 用Fruchterman-Reingold算法排列节点(这个算法我不了解,样子类似多中心放射状)
- spectral_layout:根据图的拉普拉斯特征向量排列节
布局也可用pos参数指定,例如,nx.draw(G, pos = spring_layout(G)) 这样指定了networkx上以中心放射状分布.
绘制划分后的社区
先看一段代码,代码源自
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}
单引号里的数据是key,也就是网络中节点编号。
冒号后面的数值,表示网络中节点的编号属于哪个社区。也就是社区标号。如
表示6节点属于0社区
list_nodes = [nodes for nodes in partition.keys()
if partition[nodes] == com]
每次循环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))
循环结束后通过颜色来标识不同社区
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致博客访问: 119559
博文数量: 60
博客积分: 446
博客等级: 下士
技术积分: 830
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Python/Ruby
& & & matplotlib是python下最著名的绘图库,它的特点是:Matlab的语法,使用python语言实现,latex的画图质量,下面列一下win64,python2.7环境完整安装matplotlib所需要的软件包:
& & &1.&matplotlib-1.4.2.win-amd64-py2.7.exe
& & &2.&numpy-MKL-1.9.1.win-amd64-py2.7.exe
& & &3.&pyparsing-2.0.3.win-amd64-py2.7.exe
& & &4.&python-dateutil-2.2.win-amd64-py2.7.exe
& & &5.&scipy-0.14.0.win-amd64-py2.7.exe
& & &6. six-1.8.0.win-amd64-py2.7.exe
& & &在google中搜索,就可以找到这些安装包的下载地址,有些安装包在官网上没有对应的win64的下载版本,推荐一个地址:
& & &&&这里几乎罗列了所有python扩展包在windows下的安装版本
& & &要具体学习如何画图,推荐官网,当中的examples和gallery标签页几乎列出了所有科技绘图的例子和源代码,下面列一下常用线条颜色,样式,标记选项
& & &线条颜色:
& & 线条样式:
& &标记样式:
& & &&这几幅图的来源是,这个博客上有一些简单例子应付一般的绘图足够了。
& & &&下面介绍一下networkx的安装,networkx是用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,如果需要做复杂网络数据分析,仿真建模等工作,使用这样一个工具还是非常方便的,networkx的安装包是一个egg文件,需要用easy_install安装,win64下easy_install没有现成的安装包,所以会有一些麻烦,
& & & win32下对应的安装包是setuptools-0.6c11.win32-py2.7.exe,google中搜索这个安装包会找到这样的网址,把这段脚本保存下来,(注:网上还有其他的脚本,但经我测试只有这个脚本可以在win64,python2.7环境下安装成功),在python环境下运行这个脚本,出现如下提示(尤其注意红色部分)表明安装成功:
Downloading http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-p
Processing setuptools-0.6c11-py2.7.egg
Copying setuptools-0.6c11-py2.7.egg to d:\programfile\python2.7\lib\site-package
Adding setuptools 0.6c11 to easy-install.pth file
Installing easy_install-script.py script to D:\ProgramFile\Python2.7\Scripts
Installing easy_install.exe script to D:\ProgramFile\Python2.7\Scripts
Installing easy_install.exe.manifest script to D:\ProgramFile\Python2.7\Scripts
Installing easy_install-2.7-script.py script to D:\ProgramFile\Python2.7\Scripts
Installing easy_install-2.7.exe script to D:\ProgramFile\Python2.7\Scripts
Installing easy_install-2.7.exe.manifest script to D:\ProgramFile\Python2.7\Scri
Installed d:\programfile\python2.7\lib\site-packages\setuptools-0.6c11-py2.7.egg
Processing dependencies for setuptools==0.6c11
Finished processing dependencies for setuptools==0.6c11
这时在windows的path环境变量中添加C:\Python27\Scripts,成功后用cmd打开Dos窗口,输入命令easy_install networkx,出现如下的界面(尤其注意打红框部分)说明安装成功:
顺便说一下,easy_install安装成功后,其实所有的python安装包都可以使用这种方式安装,比如:easy_install numpy,&这个命令是从网站上搜索numpy对应于当前环境的版本进行自动安装,如果事先下载好了安装包,也可以运行如下的命令:easy_install matplotlib-1.4.2.win-amd64-py2.7.exe,这里默认将安装文件放置在python安装目录下。
networkx安装完成后,在python环境中运行:
import networkx as nx
如果能输出表示networkx已正确安装,但是eclipse集成PyDev环境中import networkx as nx总是会报错:Unresolved import:nx, 使用没有问题。
阅读(3889) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 python networkx教程 的文章

 

随机推荐