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

如何用Python Numpy和Matplotlib批量处理健身轨迹GPS数据并绘图

代码修改实现方案

你需要引入Python标准库的os模块处理目录遍历和路径拼接,修改后的完整代码如下:

import numpy as np
import matplotlib.pyplot as plt
import os
from datetime import datetime

# 配置根目录参数,可根据实际存放路径修改
root_dir = "./fitness_tracker"
subfolder_prefix = "Location GPS "

# 第一步:遍历根目录,筛选符合命名规则的子文件夹并按日期排序
valid_subfolders = []
for entry in os.scandir(root_dir):
    if entry.is_dir() and entry.name.startswith(subfolder_prefix):
        # 提取子文件夹名称中的日期字符串
        date_str = entry.name.replace(subfolder_prefix, "")
        try:
            # 解析日期方便后续排序
            folder_date = datetime.strptime(date_str, "%Y-%m-%d")
            valid_subfolders.append((folder_date, entry.path))
        except ValueError:
            # 自动跳过命名不符合规则的文件夹
            continue

# 按日期降序排序,取最新的5个
valid_subfolders.sort(reverse=True, key=lambda x: x[0])
latest_5_folders = valid_subfolders[:5]

# 第二步:批量读取数据,存储各字段数组
time_list = []
speed_list = []
distance_list = []
# 纬度、经度、海拔等其他字段可按需新增对应列表存储

for date, folder_path in latest_5_folders:
    csv_path = os.path.join(folder_path, "Raw Data.csv")
    if not os.path.exists(csv_path):
        print(f"警告:{folder_path}下未找到Raw Data.csv,已跳过")
        continue
    # 读取逻辑沿用你原有单文件处理逻辑
    bus_data = np.loadtxt(csv_path, delimiter=',', skiprows=1)
    t = bus_data[:, 0] / 60
    time_list.append(t)
    speed_list.append(bus_data[:, 5])
    distance_list.append(bus_data[:, 7])

# 按要求合并时间为numpy矩阵,若各文件数据长度一致可去掉dtype=object生成二维数值矩阵
time = np.array(time_list, dtype=object)

# 第三步:多组数据绘图,这里以你原有速度-距离图为例,每组数据用不同颜色区分
fig1, axs1 = plt.subplots(1, 1, figsize=(10,6))
colors = ['k', 'r', 'b', 'g', 'orange']
for idx in range(len(speed_list)):
    date_label = latest_5_folders[idx][0].strftime("%Y-%m-%d")
    axs1.plot(distance_list[idx], speed_list[idx], '.', markersize=1, color=colors[idx], label=date_label)

axs1.set(xlabel='Distance (km)', ylabel='Speed (m/s)')
axs1.set_title('Speed over Distance (Latest 5 records)')
axs1.legend(markerscale=10) # 放大图例点方便识别
plt.savefig('Speed over Distance_latest5.png', dpi=200)
plt.show()

关键修改说明

  • 目录遍历部分通过os.scandir高效读取文件夹内容,提取日期后用datetime模块解析排序,确保取到的是最新的5个文件夹
  • 用列表暂存每组读取的字段数据,最后合并为要求的numpy数组格式
  • 绘图部分为每组数据分配了不同颜色和日期标签,方便区分不同日期的记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:36:10