Python图论库NetworkX初步

文章目录

简介

NetworkX是 Python 生态中最著名、应用最广泛的图论与复杂网络分析开源库。它的核心使命是提供一套直观、灵活且功能全面的 API,用于创建、操作、分析和可视化复杂网络(图)的结构、动态与功能。

这个库十分著名,在pip上比matplotlib下载量还大,Anaconda也包含该库,可以直接使用。官方提供的pip安装命令如下,后面的default选项用于安装相关依赖。

复制代码
pip install networkx[default]

无向图

直观来说,图论中的图(graph),就是把一群节点连接起来之后所形成的结构,用于连接节点的线,既可以有方向和权重,也可以没有。下面就是一张简单的图。

这个图包含四个节点 1 , 2 , 3 , 4 1,2,3,4 1,2,3,4,5个边 ( 1 , 2 ) , ( 1 , 3 ) , ( 1 , 4 ) , ( 4 , 2 ) , ( 3 , 2 ) (1, 2), (1, 3), (1, 4), (4, 2), (3, 2) (1,2),(1,3),(1,4),(4,2),(3,2),其生成和可视化代码如下。

python 复制代码
import networkx as nx
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'Times New Roman'

G = nx.Graph()
G.add_edges_from([(1, 2), (1, 3), (1, 4), (4, 2), (3, 2)])
nx.draw(G, with_labels=True, node_color='lightblue')
plt.show()

【Graph】是networkx中最简单的图类,从上面的可视化结果可知,其并不包含方向。

【add_edges_from】顾名思义,是一种批量添加边的方法,其输入参数是边的列表,列表中每一项都是一个边,每个边包含两个节点。节点可以是数值,也可以是字符串,其仅代表标签或序号,而不包含任何量化的含义。

【draw】是networkx提供的可视化工具,使用非常便捷。

基础图

networkx提供了四种基础图,分别是

  • 无向单图【Graph】
  • 有向单图【DiGraph】
  • 无向多重图【MultiGraph】
  • 有向多重图【MultiDiGraph】

仅从边与节点的关系出发,这四种图的差异如下

测试代码为

python 复制代码
e = [(1,1), (1,2), (2,1), (2,3)]
G = [nx.Graph(), nx.DiGraph(), nx.MultiGraph(), nx.MultiDiGraph()]
[g.add_edges_from(e) for g in G]

pos = {1:(0,0), 2:(1,0), 3:(0.5,0.9)}
for i, g in enumerate(G, 1):
    plt.subplot(2, 2, i)
    s = [f"arc3,rad={0.1 if j%2 else -0.1}" for j in range(g.number_of_edges())]
    nx.draw(g, pos, with_labels=True, node_color='lightblue', connectionstyle=s, arrows=True, 
            arrowstyle='-|>' if g.is_directed() else '-')
    plt.title(type(g).__name__)

plt.show()
相关推荐
我不会起名字3223 小时前
一天一道算法题(34):回溯法的经典例题(子集)
java·数据结构·python·算法·golang·深度优先·力扣
ThornArmor3 小时前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
毕业设计7033 小时前
(免费领源码)基于Python的博物馆研学活动管理系统的设计与实现22724- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
python·mysql·随机森林·pycharm·django·flask·推荐算法
kyrie_sakura3 小时前
python学习笔记15 -- Anaconda,Jupyter,numpy
python·学习·jupyter·numpy
Dreams_l4 小时前
死信队列和延迟队列介绍
java·开发语言
测试老哥4 小时前
接口测试的测试用例应该怎么写?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
Zenova EdgeOS4 小时前
Python 工业边缘 redis-py 异步实战
开发语言·redis·python
caoerzhong5 小时前
JeeWMS 开源仓库管理系统权限与域验证解析:Java WMS 如何把数据权限管到仓、货主与人
java·python·开源·vue
一木 之林5 小时前
Miniconda 安装与 Jupyter 使用入门
ide·python·jupyter
君顾15 小时前
西安 24 小时自助健身房系统开发实战指南
java·开发语言·健身房