当前位置: 首页 > 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. 平面图 (图论) - 维基百科,自由的百科全书
http://www.dtcms.com/a/16588.html

相关文章:

  • 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
  • Python--常见库与函数
  • Java使用Redis
  • Go语言中的panic
  • 数字内容体验案例解析与转化率提升策略
  • 问卷数据分析|SPSS实操之二元logistics分析
  • Matlab 多项式曲线拟合(三维)
  • 蓝桥杯 Java B 组之日期与时间计算(闰年、星期计算)
  • PHP场地预定小程序
  • LLM论文笔记 6: Training Compute-Optimal Large Language Models
  • nvm下载安装教程(node.js 下载安装教程)