当前位置: 首页 > news >正文

NetworkX布局算法:nx.spring_layout

诸神缄默不语-个人CSDN博文目录

官方文档:https://networkx.org/documentation/stable/reference/generated/networkx.drawing.layout.spring_layout.html

nx.fruchterman_reingold_layout()等价。

这个函数主要是为了在可视化NetworkX图时设置节点分布布局的,应该是最常用的画图布局,因为我前几年做GNN的时候几乎看的所有可视化代码用的都是这个函数……
本文会首先介绍布局原理,但其实不太重要,可以直接看代码部分。

文章目录

  • 1. 布局原理
  • 2. 代码实现
    • 1. 示例
    • 2. 参数
  • 参考资料

1. 布局原理

理念是为了好看。
目标是在二维/三维图中可视化图,①边等长。②边尽量不交叉。
优势是不需要图论知识(如平面性概念)。

使用Fruchterman-Reingold force-directed algorithm
模拟物理系统。
基于边/节点之间的相关关系,设置边/节点之间的力,然后模拟边/节点的移动来最小化熵(能量),从而得到一个相对稳定的布局。
通常使用Spring Embedding Algorithm,基于胡克定律的类似弹簧的吸引力用于相互吸引的图形中边的端点,同时使用基于库仑定律的带电粒子的排斥力来分隔所有节点对。节点之间的弹簧力和斥力共同作用,决定了节点的最终位置。弹簧力试图将相连的节点拉近,而斥力则试图将所有节点推开。通过迭代计算,节点的位置不断调整,直到系统达到平衡状态或满足预设的迭代次数。
在该力系统的平衡状态下,边的长度往往是一致的(因为弹簧引力),而没有通过边连接的节点往往会被拉开得更远(因为电荷斥力)。

2. 代码实现

1. 示例

以一个简单的无向图为例:

import networkx as nx
import matplotlib.pyplot as plt

# 创建一个无向图
G = nx.Graph()
G.add_edges_from([(1, 2), (1, 3), (2, 4), (3, 4), (4, 5)])

# 生成布局
pos = nx.spring_layout(G, k=0.15, iterations=20)

# 绘制图形
nx.draw_networkx(G, pos, with_labels=True, node_color="lightblue", edge_color="gray")
plt.show()

输出图像:
在这里插入图片描述

2. 参数

  1. k:节点间的最优距离,越大,节点之间离得越远
  2. iterations:最大算法迭代次数
  3. seed:初始化的随机种子

参考资料

  1. spring_layout — NetworkX 3.4.2 documentation
  2. 力导向图 - 维基百科,自由的百科全书
  3. 平面图 (图论) - 维基百科,自由的百科全书

相关文章:

  • ADC入门准备(十):信号与系统知识回顾
  • 算法16(力扣451)——根据字符出现频率排序
  • 使用 Python 爬虫获取微店快递费用 item_fee API 接口数据
  • SolidWorks速成教程P3-3【零件 | 第三节】——草图绘制面实线与构造线的区别
  • 贪心算法_翻硬币
  • React中Fragment的使用
  • [Windows] NVIDIA显卡驱动安装去除其中垃圾程序,NVCleanstall
  • Flutter项目试水
  • 【Framework系列之Client】LoadManager、ResourceManager介绍
  • 新的面试题CSS
  • leetcode 416. 分割等和子集
  • DeepSeek-R1:通过强化学习提升大型语言模型推理能力的探索
  • 【机器学习】监督学习-决策树-CART(Classification and Regression Tree,分类与回归树)详尽版
  • 兔兔答题应用于微信考试、付费考试、社会调查问卷、明星知识问答、员工培训考核、模拟自测、企业面试、试题库等多种场景。
  • 【Elasticsearch】index索引相关模块
  • 使用pyCharm创建Django项目
  • 【c++】字符串 string 以及与右值结合
  • 每日一题——字符串的排列
  • STM32 HAL库UART串口数据接收实验
  • kibana es 语法记录 elaticsearch
  • 欧盟和英国对俄新一轮制裁将中国公司也列入名单,外交部回应
  • 区域、学校、课堂联动,上海浦东让AI素养培育贯穿基础教育全学段
  • 围绕“工程智能”系统布局,同济大学官宣成立五大研究院
  • 第78届世界卫生大会20日审议通过“大流行协定”
  • 张核子“限高”次日即被解除,前员工的执行款3个月后仍未到账
  • 荣盛发展:新增未支付债务11.05亿元