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

相关文章:

NetworkX布局算法:nx.spring_layout

诸神缄默不语-个人CSDN博文目录 官方文档:https://networkx.org/documentation/stable/reference/generated/networkx.drawing.layout.spring_layout.html 和nx.fruchterman_reingold_layout()等价。 这个函数主要是为了在可视化NetworkX图时设置节点分布布局的&…...

Navicat导入海量Excel数据到数据库(简易介绍)

目录 前言正文 前言 此处主要作为科普帖进行记录 原先Java处理海量数据的导入时,由于接口超时,数据处理不过来,后续转为Navicat Navicat 是一款功能强大的数据库管理工具,支持多种数据库系统(如 MySQL、PostgreSQL、…...

LeetCodehot100 力扣热题100 二叉树展开为链表

代码思路 目标: 将二叉树展平(flatten)为一个单链表。展平后的链表应该按照前序遍历的顺序排列节点,即: • 节点的左子树指针设置为 nullptr。 • 节点的右子树指针指向下一个节点。 代码注释及思路 class Solution…...

2.14学习总结

#include <stdio.h> #include <stdlib.h> #include <math.h>#define MAX_N 32767// 二分查找最接近目标值的元素 int binarySearch(int* arr, int left, int right, int target) {while (left < right) {int mid left (right - left) / 2;if (arr[mid] …...

在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档教程

既然我们已经在本地部署了DeepSeek,肯定希望能够利用本地的模型对自己软件开发、办公文档进行优化使用,接下来就先在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档的教程奉上。 前提: (1)已经部署好了DeepSeek,可以看我的文章:个人windows电脑上安装DeepSe…...

zola + github page,用 workflows 部署

之前的Zola都是本地build之后&#xff0c;再push到github上&#xff0c;这种方式很明显的弊端就是只能在本地编辑&#xff0c;而不能通过github编辑&#xff0c;再pull到本地&#xff0c;缺乏了灵活性。因此将zola用workflows来部署。 repo地址&#xff1a;https://github.com/…...

【科技革命】颠覆性力量与社会伦理的再平衡

目录 2025年科技革命&#xff1a;颠覆性力量与社会伦理的再平衡目录技术突破全景图认知智能的范式转移量子霸权实现路径生物编程技术革命能源结构重构工程 产业生态链重构医疗健康新范式教育系统智能进化金融基础设施变革制造范式革命 科技伦理与文明演进 2025年科技革命&#…...

UIView 与 CALayer 的联系和区别

今天说一下UIView 与 CALayer 一、UIView 和 CALayer 的关系 在 iOS 开发中&#xff0c;UIView 是用户界面的基础&#xff0c;它负责处理用户交互和绘制内容&#xff0c;而 CALayer 是 UIView 内部用于显示内容的核心图层&#xff08;Layer&#xff09;。每个 UIView 内部都有…...

Jenkins 新建配置 Freestyle project 任务 六

Jenkins 新建配置 Freestyle project 任务 六 一、新建任务 在 Jenkins 界面 点击 New Item 点击 Apply 点击 Save 回到任务主界面 二、General 点击左侧 Configure Description&#xff1a;任务描述 勾选 Discard old builds Discard old builds&#xff1a;控制何时…...

深入解析A2DP v1.4协议:蓝牙高质量音频传输的技术与实现

1. A2DP概述 A2DP&#xff08;Advanced Audio Distribution Profile&#xff09;是一种高质量音频流媒体协议&#xff0c;旨在实现高质量音频内容的分发&#xff0c;通常用于通过蓝牙设备传输音频数据&#xff0c;例如将音乐从便携式播放器传输到耳机或扬声器。与传统的蓝牙语…...

mybatis-plus逆向code generator pgsql实践

mybatis-plus逆向code generator pgsql实践 环境准备重要工具的版本供参考pom依赖待逆向的SQL 配置文件CodeGenerator配置类配置类说明 环境准备 重要工具的版本 jdk1.8.0_131springboot 2.7.6mybatis-plus 3.5.7pgsql 14.15 供参考pom依赖 <?xml version"1.0&quo…...

Android Studio:RxBus结合ICompositeSubscription使用

我现在想用 RxBus 来发布和订阅事件&#xff0c;同时使用 ICompositeSubscription 来管理订阅。跟前一个博客的区别在于&#xff0c;事件流的产生方式不同&#xff0c;更加得全面。 目标 使用 RxBus 发布事件。使用 ICompositeSubscription 来管理订阅。在 Activity 中创建订…...

微软AutoGen高级功能——Magentic-One

介绍 大家好&#xff0c;博主又来给大家分享知识了&#xff0c;这次给大家分享的内容是微软AutoGen框架的高级功能Magentic-One。那么它是用来做什么的或它又是什么功能呢&#xff0c;我们直接进入正题。 Magentic-One Magnetic-One是一个通用型多智能体系统&#xff0c;用于…...

redis cluster测试

集群节点信息这时候停掉一个master 172.30.60.31 从集群信息集中我们可以看到172.30.60.31的slave是172.30.60.41&#xff0c;查看41的日志&#xff0c;发现他成为了新的master 这时候我们在将172.30.60.41也杀死&#xff0c;会发现集群异常了 尝试把172.30.60.31启动&#xff…...

【ARM】JTAG接口介绍

1、 文档目标 对 JTAG 接口有更多的认识&#xff0c;在遇到关于 JTAG 接口问题时有一些排查的思路。 2、 问题场景 在使用调试器过程时&#xff0c;免不了要接触到 JTAG 接口&#xff0c;当出现连接不上时&#xff0c;就不知道从哪来进行排查。 3、软硬件环境 1 软件版本&am…...

处理项目中存在多个版本的jsqlparser依赖

异常提示 Correct the classpath of your application so that it contains a single, compatible version of net.sf.jsqlparser.statement.select.SelectExpressionIte实际问题 原因&#xff1a;项目中同时使用了 mybatis-plus 和 pagehelper&#xff0c;两者都用到了 jsqlpa…...

部署 DeepSeek R1各个版本所需硬件配置清单

DeepSeek-R1 通过其卓越的推理性能和灵活的训练机制&#xff0c;在 2025 年的春节期间受到了广泛关注。 DeepSeek-R1 是一款高性能的 AI 推理模型&#xff0c;主要通过强化学习技术来增强模型在复杂任务场景下的推理能力。 在本地部署 DeepSeek-R1 时&#xff0c;尤其是完整的…...

数据结构:Map Set(一)

目录 一、搜索树 1、概念 2、查找 3、插入 4、删除 二、搜索 1、概念及场景 2、模型 &#xff08;1&#xff09;纯key模型 &#xff08;2&#xff09;Key-Value模型 三、Map的使用 1、什么是Map&#xff1f; 2、Map的常用方法 &#xff08;1&#xff09;V put(K …...

zabbix 监控系统 配置钉钉告警

步骤1&#xff1a;创建钉钉群 步骤2&#xff1a;创建机器人 点击群设置 然后下划选择机器人。 点击添加机器人 选择自定义机器人 点击添加 1、设置机器人的名字和群组 2、设置自定义关键字 zabbix 告警 报警 恢复 3、点击我已阅读并同意 4、点击完成 生成webhook 链接 注…...

跟着李沐老师学习深度学习(十一)

经典的卷积神经网络 在本次笔记中主要介绍一些经典的卷积神经网络模型&#xff0c;主要包含以下&#xff1a; LeNet&#xff1a;最早发布的卷积神经网络之一&#xff0c;目的是识别图像中的手写数字&#xff1b;AlexNet&#xff1a; 是第一个在大规模视觉竞赛中击败传统计算机…...

洗衣机磁感应技术:非接触检测的工程应用

1. 洗衣机中的磁感应技术&#xff1a;非接触检测的工程智慧第一次拆开家里的老式洗衣机时&#xff0c;我被门盖开关里那个发黑的微动开关震惊了——金属触点已经磨出了凹槽&#xff0c;塑料杠杆也变形了。这让我意识到传统机械开关在频繁启停场景下的致命缺陷。而现代洗衣机里那…...

手把手配置NCJ29D5:基于ARM Cortex-M33的UWB测距开发避坑指南

手把手配置NCJ29D5&#xff1a;基于ARM Cortex-M33的UWB测距开发避坑指南 在物联网和智能汽车快速发展的今天&#xff0c;超宽带(UWB)技术凭借其厘米级精度的定位能力&#xff0c;正在重塑从数字钥匙到室内导航的各类应用场景。作为NXP专为汽车电子设计的UWB芯片&#xff0c;NC…...

终极指南:解密snarkOS BFT共识机制如何实现高性能ZK应用的关键突破

终极指南&#xff1a;解密snarkOS BFT共识机制如何实现高性能ZK应用的关键突破 【免费下载链接】snarkOS A Decentralized Operating System for ZK Applications 项目地址: https://gitcode.com/gh_mirrors/sn/snarkOS snarkOS BFT共识机制是Aleo网络中的核心创新&…...

Python静态代码检查工具开发实战与优化

1. 项目概述&#xff1a;Python程序检查工具开发实战刚接手一个遗留Python项目时&#xff0c;我对着三万行没有类型提示的代码陷入了沉思。这时候才真正体会到检查工具&#xff08;Inspection Tools&#xff09;的价值——它们就像代码的X光机&#xff0c;能快速定位潜在问题、…...

基于MCP协议的AI主播工具链:构建标准化可扩展的智能体应用

1. 项目概述&#xff1a;当AI主播遇见MCP&#xff0c;一个开源工具链的诞生最近在捣鼓AI数字人直播和智能体应用开发的朋友&#xff0c;可能都绕不开一个核心痛点&#xff1a;如何让AI主播的“大脑”和“身体”高效、灵活地协同工作&#xff1f;传统的开发模式往往是“烟囱式”…...

第九篇:Cline(原 Claude Dev):VS Code 中最强大的自主 Agent 插件

让 AI 像真正的软件工程师一样工作&#xff1a;读代码、改文件、跑命令、查浏览器——每一步都在你的监督下进行。 引子&#xff1a;当 AI 不再只是“建议”&#xff0c;而是“执行” 你是否有过这样的体验&#xff1a;用 ChatGPT 写了一段代码&#xff0c;复制进编辑器&#…...

SlimeNexus:基于Istio的智能服务网格管理组件实战解析

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目&#xff0c;叫 SlimeNexus。如果你在 GitHub 上搜过服务网格、Kubernetes 或者 Istio 相关的工具&#xff0c;可能对这个名字有点印象。简单来说&#xff0c;SlimeNexus 是一个构建在 Istio 之上的智能服务网格管理组件…...

初创团队如何利用Taotoken多模型聚合能力低成本验证AI创意

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初创团队如何利用Taotoken多模型聚合能力低成本验证AI创意 对于资源有限的初创团队和独立开发者而言&#xff0c;在探索AI驱动的产…...

AI文本人性化:从提示工程到风格迁移,让机器写作更自然

1. 项目概述&#xff1a;当AI学会“做人”最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“behuman”。光看名字&#xff0c;你可能会觉得这是个哲学或者社会学项目&#xff0c;但实际上&#xff0c;它是一个技术味儿十足的AI应用。简单来说&#xff0c;它的核心目标就是…...

告别卡顿!用Cesium的preUpdate事件实现平滑实时轨迹回放(附完整代码)

突破性能瓶颈&#xff1a;Cesium实时轨迹回放的帧率优化实战 在三维地理信息系统中&#xff0c;实时轨迹回放是常见的可视化需求&#xff0c;但开发者常会遇到动画卡顿、时间失准等问题。当轨迹点密集或场景复杂时&#xff0c;传统的preUpdate事件回调机制可能表现出不稳定的帧…...