如何绘制单个CSV文件中分组的独立数据集?
解决方案:按分组绘制独立子数据集折线图
你的代码存在两个核心问题:一是未将数值列转换为浮点类型(读取后time和value是字符串,会导致绘图逻辑异常);二是未按分组过滤数据,直接绘制了全部数据。以下是修正后的实现方案:
步骤1:优化数据读取与类型转换
用Pandas直接读取CSV文件,自动处理表头并转换数值类型,比手动用csv模块更高效:
import pandas as pd import matplotlib.pyplot as plt # 直接读取CSV,自动识别表头,指定数值列类型 df = pd.read_csv('HR_data.csv', dtype={'Time(float)': float, 'Value (float)': float}) # 重命名列名简化后续操作 df.rename(columns={'Data Set (string)': 'Data_Set', 'Time(float)': 'Time', 'Value (float)': 'Value'}, inplace=True)
步骤2:绘制指定分组的折线图
情况1:将多个指定分组绘制在同一张图中
比如绘制data_name1和data_name3:
# 定义需要绘制的分组列表 target_groups = ['data_name1', 'data_name3'] # 遍历每个分组,过滤数据后绘图 for group in target_groups: group_data = df[df['Data_Set'] == group] # 按时间排序(确保折线顺序正确) group_data_sorted = group_data.sort_values('Time') plt.plot(group_data_sorted['Time'], group_data_sorted['Value'], label=group) # 添加图表元素 plt.xlabel('Time (sec)') plt.ylabel('Value') plt.title('Selected Data Groups Plot') plt.legend() # 显示分组标签 plt.show()
情况2:为每个指定分组单独生成图表
比如为data_name2和data_name5各生成一张图:
target_groups = ['data_name2', 'data_name5'] for group in target_groups: group_data = df[df['Data_Set'] == group].sort_values('Time') plt.figure() # 创建新的图表窗口 plt.plot(group_data['Time'], group_data['Value']) plt.xlabel('Time (sec)') plt.ylabel('Value') plt.title(f'Data Plot: {group}') plt.show()
步骤3:可选:绘制所有分组的图表
如果需要一次性查看所有10个分组的折线图,可以用groupby批量处理:
# 按Data_Set分组,遍历每个分组绘图 for name, group in df.groupby('Data_Set'): group_sorted = group.sort_values('Time') plt.plot(group_sorted['Time'], group_sorted['Value'], label=name) plt.xlabel('Time (sec)') plt.ylabel('Value') plt.title('All Data Groups Plot') plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left') # 把图例放在图表外侧避免遮挡 plt.tight_layout() # 自动调整布局 plt.show()
关键说明
- 必须对每个分组的时间列排序,否则折线会因为数据无序出现乱跳的情况
- 用
df[df['Data_Set'] == group]精准过滤目标分组数据,避免混绘其他数据集 - Pandas的
read_csv比手动读取CSV更简洁,且能自动处理数值类型转换
内容的提问来源于stack exchange,提问作者user1290633
相关产品推荐
相关产品推荐

