编辑代码

import pandas as pd
import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt

# 读取数据(假设文件路径已正确配置)
df1 = pd.read_csv('D:/KBFiles毕业论文/run-2025_03_09_00_07_Multirotor_CNN_GAP_DDPGFD_tb_logs_DDPGFD_1-tag-rollout_ep_len_mean.csv')
df2 = pd.read_csv('D:/KBFiles毕业论文/run-2025_03_12_08_45_Multirotor_CNN_GAP_DDPGFD5_tb_logs_DDPGFD_1-tag-rollout_ep_len_mean.csv')
df3 = pd.read_csv('D:/KBFiles毕业论文/run-2025_03_13_15_13_Multirotor_CNN_GAP_DDPGFD6_tb_logs_DDPGFD_1-tag-rollout_ep_len_mean.csv')

# 预处理:去重并排序
for df in [df1, df2, df3]:
    df.sort_values('Step', inplace=True)
    df.drop_duplicates('Step', inplace=True)

# 确定共同范围
common_min = max(df1['Step'].min(), df2['Step'].min(), df3['Step'].min())
common_max = min(df1['Step'].max(), df2['Step'].max(), df3['Step'].max())

# 生成插值点(1000个均匀分布的Step)
new_steps = np.linspace(common_min, common_max, 1000)

# 定义插值函数
def interpolate_data(df, new_steps):
    f = interp1d(df['Step'], df['Value'], kind='linear', fill_value='extrapolate')
    return f(new_steps)

# 对每个数据集进行插值
interp_values1 = interpolate_data(df1, new_steps)
interp_values2 = interpolate_data(df2, new_steps)
interp_values3 = interpolate_data(df3, new_steps)

# 创建合并后的DataFrame
interpolated_df = pd.DataFrame({
    'Step': new_steps,
    'Value1': interp_values1,
    'Value2': interp_values2,
    'Value3': interp_values3
})

# 绘制图表
plt.figure(figsize=(10, 6))
plt.plot(interpolated_df['Step'], interpolated_df['Value1'], color='blue', label='DDPGFD')
plt.plot(interpolated_df['Step'], interpolated_df['Value2'], color='green',label='DDPGFD5')
plt.plot(interpolated_df['Step'], interpolated_df['Value3'], color='red',label='DDPGFD6')
plt.xlabel('Step')
plt.ylabel('Episode Length Mean')
plt.title('Aligned Training Progress via Linear Interpolation')
plt.legend()
plt.grid(True)
plt.show()