You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Networkx实现指定距离阈值的节点连接与随机绘制

基于NetworkX实现二维平面内节点的距离感知连接

实现方案

要完成需求中的两个核心功能,我们需要给节点添加随机坐标属性,并基于距离阈值建立节点连接,以下是完整的代码实现:

完整代码

import networkx as nx
import matplotlib.pyplot as plt
import random
import math

# 初始化有向图(若需无向连接,替换为nx.Graph())
G = nx.DiGraph()

# 接收用户输入参数
n_size = int(input("Please enter number of nodes: "))
M = float(input("Please enter the size of 2D plane (MxM): "))
R = float(input("Please enter the distance threshold R: "))

# 为每个节点生成MxM范围内的随机坐标,并添加到图中
pos = {}
for node_id in range(n_size):
    G.add_node(node_id)
    # 生成0到M之间的随机x、y坐标
    pos[node_id] = (random.random() * M, random.random() * M)

# 遍历所有节点对,建立符合距离条件的连接
for i in range(n_size):
    for j in range(n_size):
        if i != j:  # 跳过节点自环
            # 计算两点间的欧氏距离
            distance = math.hypot(pos[i][0] - pos[j][0], pos[i][1] - pos[j][1])
            if distance <= R:
                G.add_edge(i, j)

# 绘制带坐标的图
fig, ax = plt.subplots(figsize=(6, 6))
nx.draw(G, pos=pos, with_labels=True, font_weight='normal', node_size=500, ax=ax)
# 设置坐标轴范围与平面大小一致
plt.xlim(0, M)
plt.ylim(0, M)
plt.axis('on')
plt.show()

关键细节说明

  • 坐标生成:通过random.random()生成[0, M)范围内的随机坐标,存入pos字典,既作为节点位置属性,也用于绘图时的节点定位
  • 距离判断:使用math.hypot()计算欧氏距离,该函数直接返回两点间的直线距离,比手动计算平方根更简洁高效
  • 连接逻辑:双重循环遍历所有节点对,排除自环后,若距离≤阈值R则添加有向边;如果需要无向连接,只需将nx.DiGraph()替换为nx.Graph(),此时添加单边会自动生成双向连接

内容的提问来源于stack exchange,提问作者Waqas Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:40:23