如何用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
相关产品推荐
相关产品推荐

