如何将20份跑步记录DataFrame的心率数据整合到同一张箱线图展示
实现方案
核心思路是将20个独立的跑步记录DataFrame合并为带唯一跑步标识的总表,再调用可视化库绘制分组箱线图即可,完整实现流程如下:
1. 导入所需依赖
import pandas as pd import matplotlib.pyplot as plt # 可选:用seaborn绘制样式更美观的箱线图 import seaborn as sns
2. 批量合并20份跑步数据
假设20份记录文件统一命名为run_0.csv~run_19.csv且存放在同一目录下,合并代码如下:
all_run_data = [] for run_id in range(20): # 读取单份跑步记录 single_run_df = pd.read_csv(f"run_{run_id}.csv") # 新增列标识当前是第几次跑步,用于后续分组 single_run_df["跑步批次"] = f"第{run_id+1}次跑步" all_run_data.append(single_run_df) # 合并为总表,不同长度的记录会自动对齐 total_df = pd.concat(all_run_data, ignore_index=True)
如果你的文件命名规则不同,只需修改循环内的文件读取路径,保证每个单表新增的「跑步批次」列是唯一标识即可。
3. 绘制箱线图
方法1:使用seaborn绘制(推荐,样式更友好)
plt.figure(figsize=(16, 7)) # x轴为跑步批次,y轴为心率列,注意替换为你实际的列名(你给出的示例写为Hears Rate,大概率是Heart Rate的拼写错误) sns.boxplot(data=total_df, x="跑步批次", y="Heart Rate") # 旋转x轴标签避免文字重叠 plt.xticks(rotation=30) plt.title("20次跑步心率分布对比") plt.xlabel("跑步记录批次") plt.ylabel("心率(次/分钟)") # 自动调整布局避免标签被截断 plt.tight_layout() plt.show()
方法2:使用原生matplotlib绘制(无需额外安装seaborn)
# 直接提取每个批次的心率序列 hr_series_list = [df["Heart Rate"] for df in all_run_data] plt.figure(figsize=(16, 7)) plt.boxplot(hr_series_list, labels=[f"第{i+1}次跑步" for i in range(20)]) plt.xticks(rotation=30) plt.title("20次跑步心率分布对比") plt.xlabel("跑步记录批次") plt.ylabel("心率(次/分钟)") plt.tight_layout() plt.show()
两种实现方式都支持自动适配不同时长的跑步记录,最终输出的图中每个箱线对应单次跑步所有心率数据的分布统计,包含中位数、四分位距、异常值等信息。
内容的提问来源于stack exchange,提问作者sleli
相关产品推荐
相关产品推荐

