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

散点数据曲线拟合:连续点连接代码异常问题求助

问题:坐标点绘图连接异常,需按原始顺序连接连续点

原代码

import matplotlib.pyplot as plt
import math

# 计算两点间距离的函数
def distance(p1, p2):
    return math.sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2)

# 从文件读取点数据
points = []
with open("coord.txt", "r") as file:
    for line in file:
        x, y = map(int, line.strip().split())
        points.append((x, y))

# 初始化已连接点和待连接点列表
connected_points = [points[0]]
points_to_connect = points[1:]

# 不断连接最近点直到所有点都被连接
while points_to_connect:
    last_point = connected_points[-1]
    nearest_point = min(points_to_connect, key=lambda p: distance(last_point, p))
    
    points_to_connect.remove(nearest_point)
    connected_points.append(nearest_point)

# 绘制点并连线
plt.scatter(*zip(*points), color='red')
for i in range(len(connected_points) - 1):
    plt.plot(*zip(*connected_points[i:i+2]), color='blue')

plt.xlabel('X')
plt.ylabel('Y')
plt.title('Connecting Nearest Points')
plt.grid(True)
plt.show()

问题现象

这段代码对部分整数坐标文件有效,但处理我需要的坐标数据时会出现异常:遗漏一个点并错误地将其连接到第一个点。

需求说明

需要编写代码读取包含三列数据的文本文件,将第二列与第三列数据绘图,并严格按照文件中点的顺序依次连接连续点形成曲线。

数据格式

我的模拟输出数据格式如下:

(0 149.68752602446622 60.31434186400232)
(0 149.69331627188203 65.34321553470865)
(0 149.7019081389601 70.37384784896992)

异常截图

  • 整体绘图:整体绘图
  • 异常部分:异常部分

我试过Stack Overflow上的相关方案,但问题依旧,恳请帮忙解决。


解决方案

你的核心问题是原代码采用了最近邻连接算法,会打乱点的原始顺序,而你实际需要的是按文件中的顺序连接连续点。另外原代码读取数据时存在两个问题:一是将浮点数转成了整数,二是未处理带括号的三列数据格式。

修正后的代码如下:

import matplotlib.pyplot as plt

# 读取文件并提取第二、第三列作为坐标点
points = []
with open("coord.txt", "r") as file:
    for line in file:
        # 去除首尾括号,分割数据后取第2、3列(索引1和2)
        cleaned_line = line.strip().strip('()')
        parts = cleaned_line.split()
        # 转换为浮点数
        x = float(parts[1])
        y = float(parts[2])
        points.append((x, y))

# 拆分所有点的x、y坐标
x_coords, y_coords = zip(*points)

# 绘制散点并按原始顺序连线
plt.scatter(x_coords, y_coords, color='red')
plt.plot(x_coords, y_coords, color='blue')

plt.xlabel('X')
plt.ylabel('Y')
plt.title('Connecting Points in Original Order')
plt.grid(True)
plt.show()

代码说明

  1. 数据读取修正:处理了带括号的行格式,正确提取第二、第三列的浮点数,避免了整数转换导致的精度丢失;
  2. 连接逻辑简化:直接使用文件中的原始点顺序,通过plt.plot(x_coords, y_coords)一次性完成连续点连线,无需复杂的最近邻计算;
  3. 保留散点显示的同时,用一条曲线连接所有连续点,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:41:30