NetworkX是一个很强大的python网络处理工具包,内置了常用的图和复杂网络分析方法。一般网络处理不关心节点的坐标,因为网络分析通常只关心节点的连通关系和边的权值属性,一般并不涉及坐标值。但是在对路网进行模拟的时候,大多需要将网络直观地呈现出来,这是个简单但是网络上的文章鲜有涉及的问题。针对网络绘制,NetworkX提供了一个简单的方法,此方法依赖于matplotlib中的pyplot函数,于是在开头需要导入以下两个工具包:
import networkx as nx
import matplotlib.pyplot as plt
NetworkX和matplotlib的安装和配置请查阅网络教程,假设以下是路网,中间褐色的点是村庄,绿色的方块是城市,路网的节点由村庄、城市和交叉节点组成。

图1 实际路网
对上面的路网中的节点进行人工编号:

图2 节点编号
在图2中,笔者将村庄编码为1-29的29个点,交叉点编码为1021-1024共24个点,为了使图更为紧凑,还调整了原图,添加了两个交叉点1025和1026,城市节点编码为'a-e'。准备工作做好以后,开始使用networkx新建网络。
roads=nx.Graph()#新建一个无向图
将附带人口属性的城市节点添加到网络中
#城市的人口数据
rcapacity=[24115, 15092, 16194, 22563, 19311]
rnlist=['a','b','c','d','e'] #城市节点列表
#将城市添加到网络中
for i in range(0,5):
roads.add_node(rnlist[i],capacity=rcapacity[i])
将附带人口属性的村庄节点添加到网络中:
npop=[637, 1517, 4683, 1860, 1102, 4684, 1233, 4421, 2286, 529, 4489, 3071, 4268,\
25