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

如何将Geodesic距离取整至最近米数?解决NetworkX绘图混乱问题

解决NetworkX边权重(Geodesic距离)绘图时小数过长的问题

问题根源

你碰到的报错是因为geodesic不是Python原生的数值类型,没法直接用round()或者numpy的np.round()处理,得先把它转成float/int这类可计算的数值格式。

三种可行解决方案

1. 生成边属性时直接处理

在设置边的距离属性时,就把Geodesic距离转成浮点型并截取小数位:

# 替换你原本添加边权重的逻辑
for u, v in map.edges():
    # 这里是你计算Geodesic距离的代码
    geo_dist = 你的距离计算逻辑
    # 转成float后保留3位小数
    rounded_dist = round(float(geo_dist), 3)
    map.edges[u, v]['distance'] = rounded_dist

2. 批量修改已有的边属性

如果已经生成了带geodesic对象的边属性,直接遍历批量转换:

for u, v, attrs in map.edges(data=True):
    attrs['distance'] = round(float(attrs['distance']), 3)

3. 仅在绘图时格式化显示(不改动原始数据)

要是不想修改原始权重,只在绘图标签里做格式化:

import networkx as nx
import matplotlib.pyplot as plt

# 选个合适的布局
pos = nx.spring_layout(map)
# 绘制节点和标签,可调整大小避免遮挡
nx.draw(map, pos, with_labels=True, node_size=700, font_size=10)

# 格式化边标签,保留3位小数
edge_labels = {(u, v): round(float(d['distance']), 3) for u, v, d in map.edges(data=True)}
nx.draw_networkx_edge_labels(map, pos, edge_labels=edge_labels, font_size=8)

plt.show()

额外调整技巧

  • 要取整的话,把round(float(g), 3)改成int(float(g))就行
  • 还能通过调整node_size、font_size参数,进一步解决节点名称被遮挡的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:39:56