matplotlib 散乱数据的曲线拟合

nkhmeac6  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(146)

我使用了以下代码:

import matplotlib.pyplot as plt
import math

# Function to calculate distance between two points
def distance(p1, p2):
    return math.sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2)

# Read points from file
points = []
with open("coord.txt", "r") as file:
    for line in file:
        x, y = map(int, line.strip().split())
        points.append((x, y))

# Initialize lists to store connected points and points yet to connect
connected_points = [points[0]]
points_to_connect = points[1:]

# Connect the nearest point until all points are connected
while points_to_connect:
    # Find the nearest point to the last connected point
    last_point = connected_points[-1]
    nearest_point = min(points_to_connect, key=lambda p: distance(last_point, p))
    
    # Move the nearest point from points_to_connect to connected_points
    points_to_connect.remove(nearest_point)
    connected_points.append(nearest_point)

# Plotting points and connecting them with lines
plt.scatter(*zip(*points), color='red')  # Plots the points
for i in range(len(connected_points) - 1):  # Connects the points with a line
    plt.plot(*zip(*connected_points[i:i+2]), color='blue')

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

# Showing the plot
plt.grid(True)
plt.show()

连接我有坐标的点。代码对某些坐标文件非常有效,但对我需要的坐标不起作用,它错过了一个点,并将该点连接到第一个点。
我想做的是,有代码读取一个有三列的文本文件,绘制第二列与第三列的数据,并将每两个连续的点相互连接。我想用一组点制作一条曲线。我的数据看起来像这样:第二列和第三列是点的坐标(从另一个模拟输出)
(0 149.69331627188203 65.34321553470865)(0 149.7019081389601 70.37384784896992)
有人能帮我吗?这段代码对于一个有整数值的坐标集非常有效。
我也尝试了这里的解决方案:Fitting a closed curve to a set of points
但仍然有同样的问题。
图中附有两张快照以供参考。

wwwo4jvm

wwwo4jvm1#

我认为问题就在这里:

last_point = connected_points[-1]

你假设“coord.txt”的最后一个点也是曲线的最后一个点,但也许不是。(我没有数据,所以我不确定)

也许你的算法是从黑色圆圈(文件txt的最后一个点)开始,并连接红色箭头后面的所有点。
你可以做的是检查以下顺序:
1.选择要研究的点
1.查找距离步骤0中的点最近的点
1.从步骤0中的点查找第二个最近的点
1.如果第2步中的点更接近第1步中的点而不是第0步中的点,那么您将找到曲线的尾部(或您希望开始连接点的点)

相关问题