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

基于Pandas Dataframe生成带权重边的网络图,解决Pyvis边长度一致问题

解决Pyvis网络图边权重体现长度差异的问题

你的问题核心是没有在代码中利用权重值控制边的长度,且未启用支持权重影响的布局算法。以下是修改后的实现方案:

关键修改点

  • 给边绑定实际权重值,让布局算法能读取到权重
  • 使用支持权重影响的布局(比如Force Atlas 2),并开启边权重对长度的影响
  • 避免重复添加节点
  • 正确显示边的权重标签

修改后的完整代码

import pandas as pd
from IPython.display import display, HTML
from pyvis.network import Network 

df = pd.read_csv('sample_data.csv')
# 初始化网络图,可自定义尺寸
got_net = Network(notebook=True, cdn_resources='in_line', height='800px', width='100%')

# 先收集所有唯一节点,避免重复添加
all_nodes = pd.concat([df['from'], df['to']]).unique()
for node in all_nodes:
    got_net.add_node(node, title=node)

# 遍历边数据,绑定权重
for _, row in df.iterrows():
    src = row['from']
    dst = row['to']
    w = row['weight']
    # 添加边时传入权重值,同时显示权重标签
    got_net.add_edge(src, dst, label=str(w), value=w)

# 生成邻居信息(保留原有逻辑)
neighbor_map = got_net.get_adj_list()  
for node in got_net.nodes:
    node['title'] += ' 邻居: ' + ', '.join(neighbor_map[node['id']])
    node['value'] = len(neighbor_map[node['id']])

# 启用Force Atlas 2布局,开启边权重对长度的影响
# edge_weight_influence值越大,权重对边长度的影响越明显
# 如果weight是距离(值越大边应该越长)用正数值;如果是相似度(值越大边越短)用负数值
got_net.force_atlas_2based(edge_weight_influence=1.0)

# 保存并展示图
got_net.save_graph('graph.html')
display(HTML("graph.html"))

额外说明

  1. 布局调整:Force Atlas 2是Pyvis中支持边权重影响的核心布局,edge_weight_influence参数可根据数据情况调整(比如0.5~2.0区间),优化边长度的区分度。
  2. 权重映射:如果需要让权重和边长度的关联更贴合需求,可以对原始权重值做转换(比如用1/w让距离越大的边更短,或w*0.1缩放影响程度)后再传入value参数。
  3. 多CSV处理:如果有多个CSV文件,可通过循环读取合并数据:
    import glob
    df_list = []
    for file in glob.glob('*.csv'):
        df_list.append(pd.read_csv(file))
    df = pd.concat(df_list, ignore_index=True)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:35:14