You need to enable JavaScript to run this app. 基于Multi-index Dataframe绘制Traction、Stribeck四类曲线图问题
优惠活动
大模型
产品
解决方案
定价
更多

基于Multi-index Dataframe绘制Traction、Stribeck四类曲线图问题

绘图需求
  • 按Step Typ字段的两个取值Traction、Stribeck分别绘图,不同负载等级单独生成对应图表,同负载等级下按温度拆分为不同折线
  • Traction类图表:y轴为Traction (-),x轴为SRR (%)
  • Stribeck类图表:y轴为Traction (-),x轴为Rolling speed (mm/s)
  • 最终输出4张独立图表
原代码问题

原代码运行仅输出空白图,核心错误如下:

  1. 坐标轴设置错误:Traction类型图表错误使用只有Stribeck类型才有的Rolling Speed (mm/s)作为x轴,且y轴硬设范围为0-0.1,实际Traction (-)取值范围为2~11,所有数据点都超出显示范围
  2. 逻辑不匹配:没有按要求区分两类图表生成,也没有按温度分组绘制折线,而是逐行绘制单点,无法形成有效折线
  3. 索引遍历逻辑错误:没有正确利用多级索引分组数据,绘图逻辑混乱
修正后可运行代码
import pandas as pd
import matplotlib.pyplot as plt

data = {'Step 1': {'Step Typ': 'Traction', 'SRR (%)': {1: 8.384, 2: 9.815, 3: 7.531, 4: 10.209, 5: 7.989, 6: 7.331, 7: 5.008, 8: 2.716, 9: 9.6, 10: 7.911}, 'Traction (-)': {1: 5.602, 2: 6.04, 3: 2.631, 4: 2.952, 5: 8.162, 6: 9.312, 7: 4.994, 8: 2.959, 9: 10.075, 10: 5.498}, 'Temperature': 30, 'Load': 40}, 'Step 3': {'Step Typ': 'Traction', 'SRR (%)': {1: 2.909, 2: 5.552, 3: 5.656, 4: 9.043, 5: 3.424, 6: 7.382, 7: 3.916, 8: 2.665, 9: 4.832, 10: 3.993}, 'Traction (-)': {1: 9.158, 2: 6.721, 3: 7.787, 4: 7.491, 5: 8.267, 6: 2.985, 7: 5.882, 8: 3.591, 9: 6.334, 10: 10.43}, 'Temperature': 80, 'Load': 40}, 'Step 5': {'Step Typ': 'Traction', 'SRR (%)': {1: 4.765, 2: 9.293, 3: 7.608, 4: 7.371, 5: 4.87, 6: 4.832, 7: 6.244, 8: 6.488, 9: 5.04, 10: 2.962}, 'Traction (-)': {1: 6.656, 2: 7.872, 3: 8.799, 4: 7.9, 5: 4.22, 6: 6.288, 7: 7.439, 8: 7.77, 9: 5.977, 10: 9.395}, 'Temperature': 30, 'Load': 70}, 'Step 7': {'Step Typ': 'Traction', 'SRR (%)': {1: 9.46, 2: 2.83, 3: 3.249, 4: 9.273, 5: 8.792, 6: 9.673, 7: 6.784, 8: 3.838, 9: 8.779, 10: 4.82}, 'Traction (-)': {1: 5.245, 2: 8.491, 3: 10.088, 4: 9.988, 5: 4.886, 6: 4.168, 7: 8.628, 8: 5.038, 9: 7.712, 10: 3.961}, 'Temperature': 80, 'Load': 70}, 'Step 2': {'Step Typ': 'Stribeck', 'Rolling Speed (mm/s)': {1: 4.862, 2: 4.71, 3: 4.537, 4: 6.35, 5: 6.691, 6: 5.337, 7: 8.419, 8: 10.303, 9: 5.018, 10: 10.195}, 'Traction (-)': {1: 6.674, 2: 10.137, 3: 2.822, 4: 5.494, 5: 9.986, 6: 9.095, 7: 3.53, 8: 6.96, 9: 8.251, 10: 7.836}, 'Temperature': 30, 'Load': 40}, 'Step 4': {'Step Typ': 'Stribeck', 'Rolling Speed (mm/s)': {1: 4.04, 2: 8.288, 3: 3.731, 4: 10.137, 5: 5.32, 6: 8.504, 7: 5.917, 8: 9.677, 9: 8.641, 10: 7.685}, 'Traction (-)': {1: 9.522, 2: 4.749, 3: 3.46, 4: 3.21, 5: 5.005, 6: 9.886, 7: 8.023, 8: 5.935, 9: 8.74, 10: 5.117}, 'Temperature': 80, 'Load': 40}, 'Step 6': {'Step Typ': 'Stribeck', 'Rolling Speed (mm/s)': {1: 6.244, 2: 7.015, 3: 5.998, 4: 4.894, 5: 6.117, 6: 6.644, 7: 7.619, 8: 10.477, 9: 9.61, 10: 2.958}, 'Traction (-)': {1: 7.353, 2: 7.98, 3: 6.675, 4: 8.853, 5: 7.537, 6: 5.256, 7: 4.923, 8: 10.293, 9: 2.873, 10: 10.407}, 'Temperature': 30, 'Load': 70}, 'Step 8': {'Step Typ': 'Stribeck', 'Rolling Speed (mm/s)': {1: 3.475, 2: 2.756, 3: 7.809, 4: 9.449, 5: 2.72, 6: 4.133, 7: 10.139, 8: 10.0, 9: 3.71, 10: 8.267}, 'Traction (-)': {1: 6.307, 2: 2.83, 3: 9.258, 4: 3.405, 5: 9.659, 6: 6.662, 7: 6.413, 8: 6.488, 9: 7.972, 10: 6.288}, 'Temperature': 80, 'Load': 70} }

# 数据预处理
items = []
series = []
for item, d in data.items():
    items.append(item)
    series.append(pd.DataFrame.from_dict(d))
df = pd.concat(series, keys=items)
df.set_index(['Step Typ', 'Load', 'Temperature'], inplace=True)

# 按Step Typ类型绘图
step_types = ['Traction', 'Stribeck']
x_col_map = {
    'Traction': 'SRR (%)',
    'Stribeck': 'Rolling Speed (mm/s)'
}

for step_type in step_types:
    # 按负载分组,每个负载生成一张图
    for load, load_df in df.loc[step_type].groupby(level='Load'):
        plt.figure(figsize=(10, 6))
        # 同负载下按温度分组绘制折线
        for temp, temp_df in load_df.groupby(level='Temperature'):
            # 按x轴值排序保证折线连贯
            plot_df = temp_df.sort_values(by=x_col_map[step_type])
            plt.plot(plot_df[x_col_map[step_type]], plot_df['Traction (-)'], label=f'{temp}℃', marker='o')
        
        # 图表属性设置
        plt.xlabel(x_col_map[step_type])
        plt.ylabel('Traction (-)')
        plt.title(f'{step_type} Curve - Load {load}N')
        plt.legend()
        plt.grid(alpha=0.3)
        plt.show()

内容的提问来源于stack exchange,提问作者Operator23

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 23:24:02