如何基于DataFrame两列条件筛选数据,绘制INL数据的带图例叠合折线图
实现代码
你可以直接遍历groupby生成的分组绘制折线,完整可运行代码如下:
import pandas as pd import matplotlib.pyplot as plt data = {'Test_no': [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1], 'Temperature': [25, 25, 25, 25, 50, 50, 50, 50, 25, 25, 25, 25, 50, 50, 50, 50], 'Codes': [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,], 'INL':[0,1.1,-0.9,0, 0,1.0,-0.8,0, 0,0.9,-0.7,0, 0,1.2,-0.6,0]} df = pd.DataFrame(data) # 初始化画布 plt.figure(figsize=(8, 4)) # 按Test_no和Temperature分组后遍历每个分组绘制折线 for (test_no, temp), group_data in df.groupby(['Test_no', 'Temperature']): # X轴为Codes,Y轴为INL,图例标签显示测试编号和温度 plt.plot(group_data['Codes'], group_data['INL'], label=f'Test_no={test_no}, Temp={temp}℃') # 配置图表样式 plt.xlabel('Codes') plt.ylabel('INL') plt.legend() # 显示图例 plt.grid(alpha=0.3) plt.show()
原有代码问题说明
你之前的代码存在两个明显错误:
- 筛选逻辑覆盖:连续两次给变量
d赋值,第二次的Test_no筛选直接覆盖了第一次的温度筛选结果,最终只拿到了所有Test_no为0的数据,没有区分温度维度 - 未指定X轴:直接调用
d['INL'].plot()默认会使用行索引作为X轴,不会取你需要的Codes列作为X轴
可选:筛选特定分组绘制
如果你的全量数据还有其他Test_no和Temperature取值,只需要绘制Test_no为0、1且Temperature为25、50的分组,可以先过滤原数据再做分组绘制:
# 先过滤符合条件的行 filtered_df = df[(df['Test_no'].isin([0, 1])) & (df['Temperature'].isin([25, 50]))] # 再对filtered_df做groupby遍历绘图即可,后续逻辑和上面一致
内容的提问来源于stack exchange,提问作者smcgiv
相关产品推荐
相关产品推荐

