NetworkX简明教程
本文最后更新于 2022年11月21日 晚上
看完能够轻松上手的 NetworkX 简明教程,也能够用于日常使用的快捷查询
NetworkX简明教程
简介
什么是NetworkX?
NetworkX是用于研究图论和网络的Python库,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。
安装
anaconda中内置有NetworkX,其他可以用下述命令进行安装
1 |
|
基本语法
导入NetworkX库
1 |
|
添加和删除
创建和清除图
下列语句用来创建一个没有节点和边的空图
1 |
|
下列语句用来清除图
1 |
|
添加和删除节点
下列语句均可以添加节点
1 |
|
※:注意下列两种语句的区别
1 |
|
下列语句用来删除节点
1 |
|
添加和删除边
下列语句均可以添加边
1 |
|
下列语句用来删除边
1 |
|
添加一个闭环
1 |
|
访问
对节点相关的访问
1 |
|
对边相关的访问
1 |
|
对邻近的访问
※:对于无向图,邻接迭代可以看到每个边两次。
1 |
|
eg:
1 |
|
属性
图的属性
1 |
|
节点属性
1 |
|
边的属性
1 |
|
※:特殊属性 weight
应该是数字,因为它被需要加权边缘的算法使用
有向图
有向图和无向图互转
有些算法只适用于有向图,而另一些算法不适用于有向图。实际上,将有向图和无向图集中在一起的趋势是危险的。所以有必要进行两者的相互转换。
下列语句和两种图的互转有关
1 |
|
有向图添加、删除和访问
有向图的添加、删除和访问和无向图基本上是一样的,在这里不做赘述。
图形分析
介数中心性
1 |
|
更多的算法可见下列站点:
- https://www.osgeo.cn/networkx/reference/algorithms/index.html
- https://networkx.github.io/documentation/stable/reference/algorithms/index.html
图片绘制
可以利用matplotlib库进行图形可视化,常见的语句如下:
draw (g) [, pos, ax] ) | 用matplotlib绘制图g。 |
draw_networkx (g) [, pos, arrows, with_labels] ) | 使用matplotlib绘制图g。 |
draw_networkx_nodes (G,POS) [, nodelist, ...] ) | 绘制图G的节点。 |
draw_networkx_edges (G,POS) [, edgelist, ...] ) | 绘制图G的边。 |
draw_networkx_labels (G,POS) [, labels, ...] ) | 在图G上绘制节点标签。 |
draw_networkx_edge_labels (G,POS) [, ...] ) | 绘制边缘标签。 |
bipartite_layout (g,node) [, align, scale, ...] ) | 将节点定位在两条直线上。 |
circular_layout (g) [, scale, center, dim] ) | 节点在一个圆环上均匀分布 |
planar_layout (g) [, scale, center, dim] ) | 没有边缘交点的节点分布 |
random_layout (g) [, center, dim, seed] ) | 在单位正方形内均匀随机定位节点。 |
shell_layout (g) [, nlist, scale, center, dim] ) | 节点在同心圆上分布 |
下列给出了一些图片绘制中可能用到的参数
pos(dictionary, optional) | 图像的布局,可选择参数;如果是字典元素,则节点是关键字,位置是对应的值。如果没有指明,则会是spring的布局; |
arrows | 布尔值,默认True; 对于有向图,如果是True则会画出箭头 |
with_labels: | 节点是否带标签(默认为True) |
ax: | 坐标设置,可选择参数;依照设置好的Matplotlib坐标画图 |
nodelist | 一个列表,默认G.nodes(); 给定节点 |
edgelist | 一个列表,默认G.edges();给定边 |
node_siz | 指定节点的尺寸大小(默认是300) |
node_color | 指定节点的颜色 (默认是红色,可以用字符串简单标识颜色,具体可查看手册) |
node_shape: | 节点的形状(默认是圆形,用字符串’o’标识,具体可查看手册) |
alpha | 透明度 (默认是1.0,不透明,0为完全透明) |
cmap | Matplotlib的颜色映射,默认None; 用来表示节点对应的强度 |
vmin,vmax | 浮点数,默认None;节点颜色映射尺度的最大和最小值 |
linewidths | [None|标量|一列值];图像边界的线宽 |
width | 边的宽度 (默认为1.0) |
edge_color | 边的颜色(默认为黑色) |
edge_cmap | Matplotlib的颜色映射,默认None; 用来表示边对应的强度 |
edge_vmin,edge_vmax | 浮点数,默认None;边的颜色映射尺度的最大和最小值 |
style | 边的样式(默认为实现,可选: solid|dashed|dotted,dashdot) |
labels | 字典元素,默认None;文本形式的节点标签 |
font_size | 节点标签字体大小 (默认为12) |
font_color | 节点标签字体颜色(默认为黑色) |
font_weight | 字符串,默认’normal’ |
font_family | 字符串,默认’sans-serif’ |
图表读写
详见下列站点:
- https://www.osgeo.cn/networkx/reference/readwrite/index.html
- https://networkx.github.io/documentation/stable/reference/readwrite/index.html
参考资料
NetworkX简明教程
https://justloseit.top/NetworkX简明教程/