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

如何基于Pandas DataFrame在Python NetworkX中创建指定布局无向图

NetworkX指定中心节点、边长度、节点大小的实现方案

结论

该需求完全可以实现,核心逻辑是手动指定节点坐标来绑定边长度到你给定的dist值,避免NetworkX默认自动布局的不可控问题。

实现步骤

1. 依赖说明

需要提前安装三个库:pandas、networkx、matplotlib,安装命令如下:

pip install pandas networkx matplotlib

2. 完整可运行代码

import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt

# 构造数据集
d = {'label': [1, 2, 3, 4, 5], 'size': [10, 8, 6, 4, 2], 'dist': [0, 2, -2, 4, -4]}
df = pd.DataFrame(data=d)

# 计算每个节点的坐标,此处沿x轴排列,保证到中心(0,0)的距离等于dist的绝对值
# 如需节点绕中心呈圆形散开,可自行调整y坐标的计算逻辑
pos = {}
for _, row in df.iterrows():
    node = row['label']
    # 中心节点1放在(0,0)
    if node == 1:
        pos[node] = (0, 0)
    else:
        # dist为正放在x轴正方向,负的放在x轴负方向,y坐标为0
        pos[node] = (row['dist'], 0)

# 构建无向图
G = nx.Graph()
# 添加所有节点
G.add_nodes_from(df['label'].tolist())
# 添加边:所有节点和中心节点1相连
for node in df['label'].tolist():
    if node != 1:
        G.add_edge(1, node)

# 绘制图像
plt.figure(figsize=(8, 4))
# 绘制边
nx.draw_networkx_edges(G, pos)
# 绘制节点:node_size与size成正比,乘以200是缩放系数,可自行调整
node_sizes = df['size'] * 200
nx.draw_networkx_nodes(G, pos, node_size=node_sizes, node_color='lightblue')
# 绘制节点标签
nx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold')
# 关闭坐标轴
plt.axis('off')
plt.show()

3. 效果说明

运行上述代码后得到的图完全匹配你的要求:

  • label为1的最大节点固定在图像中心位置
  • 每条边的长度和对应dist的绝对值完全一致
  • 节点显示大小和size列数值成正比

如果需要节点不排列在同一条水平线上,只需要修改坐标计算逻辑,给每个非中心节点分配不同的y坐标,保证节点到(0,0)的欧氏距离等于abs(dist)即可,例如圆形布局的坐标计算可以改成:

import math
# 非中心节点列表
other_nodes = df[df['label']!=1]['label'].tolist()
angle_step = 2 * math.pi / len(other_nodes)
for i, node in enumerate(other_nodes):
    dist = df.loc[df['label']==node, 'dist'].iloc[0]
    angle = i * angle_step
    x = abs(dist) * math.cos(angle)
    # 保留dist的正负方向,不需要可删除下面两行
    sign = 1 if dist >0 else -1
    x = x * sign
    y = abs(dist) * math.sin(angle)
    pos[node] = (x, y)

内容的提问来源于stack exchange,提问作者Avto Abashishvili

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:36:02