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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:20:33