如何在Python中绘制多id分组的cycle与Salary对比图
多组id的cycle与Salary曲线同图绘制方案
实现思路
遍历数据集中所有唯一id,提取每组对应的cycle和Salary数据,依次绘制到同一画布,最后统一配置图表元素完成对比可视化。
完整实现代码
1. 加载数据集(复用原有代码)
import pandas as pd import matplotlib.pyplot as plt # 创建数据集 data = {'id': [1, 1, 1, 1, 1,1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5,5], 'cycle': [1,2, 3, 4, 5,6,7, 1,2, 3,4,5,6, 1,2, 3, 4, 5, 1,2, 3, 4, 1,2, 3, 4, 5,6,], 'Salary': [7, 7, 7,7,7,7,7, 4, 4, 4,4,4,4, 8,8,8,8,8, 10,10,10,10, 15, 15,15,15,15,15,], 'Jobs': [123, 18, 69, 65, 120, 11, 52, 96, 120,10, 141, 52,6, 101,99, 128, 1, 141, 141,123, 12, 66, 12, 128, 66, 100, 141, 52,], 'Days': [123, 128, 66, 66, 120, 141, 52, 96, 120,120, 141, 52,96, 15,123, 128, 120, 141, 141,123, 128, 66, 123, 128, 66, 120, 141, 52,], } # 转换为DataFrame df = pd.DataFrame(data)
2. 多组曲线绘制代码
# 获取所有唯一id unique_ids = df['id'].unique() # 遍历每个id绘制对应曲线 for id_val in unique_ids: group_data = df.groupby('id').get_group(id_val) plt.plot(group_data['cycle'], group_data['Salary'], label=f'id={id_val}') # 配置图表元素 plt.xlabel('cycle') plt.ylabel('Salary') plt.legend() plt.xlim(0, 10) plt.ylim(0, 20) plt.title('Salary vs Cycle by ID') plt.show()
代码说明
df['id'].unique():提取所有不重复的id,避免重复绘制同一组数据- 循环内通过
groupby('id').get_group(id_val)获取当前id对应的分组数据 - 每条曲线通过
label=f'id={id_val}'设置图例名称,方便区分不同组 - 最后统一设置坐标轴标签、图例、刻度范围和标题,完成图表配置
简化写法(利用groupby的apply方法)
可以借助groupby的apply方法省略手动遍历步骤,代码更简洁:
df.groupby('id').apply(lambda x: plt.plot(x['cycle'], x['Salary'], label=f'id={x.name}')) plt.xlabel('cycle') plt.ylabel('Salary') plt.legend() plt.xlim(0, 10) plt.ylim(0, 20) plt.title('Salary vs Cycle by ID') plt.show()
这里x.name会自动获取当前分组的id值,无需额外提取唯一id列表。
内容的提问来源于stack exchange,提问作者NN_Developer
相关产品推荐
相关产品推荐

