使用 timedelta 正确对齐图表上的峰值

Using timedelta to properly allign peaks on graph

我正在使用 scipy.signal 库来查找时间图的峰值。我输入了 pandas 系列的 y 值。它给了我山峰的位置。现在我正在尝试使用 find_peaks 函数的位置到 return 峰值时间的位置。这是我的功能:

def turn_peaks_to_time_series(df,t_interval):
    df_values = df['l'].values
    fig, ax1  = plt.subplots()
    
    x_of_peaks, _ = find_peaks(df_values, height=None)
    y_of_peaks = df_values[x_of_peaks]
    
    x_values_to_t_values = lambda x : timedelta(minutes=x) * t_interval
    time_initial = np.min(df.index)
    
    t_of_peaks = [ time_initial + x_values_to_t_values(int(i)) for i in x_of_peaks ] #source of issue
    
    ax1.plot(t_of_peaks, y_of_peaks, "rp",label='peak') #plot peaks on graph
    ax1.plot(df.index,df.l) # plot df line
    plt.show()

但是,峰没有正确对齐

我知道问题出在我的 x_values_to_t_values 函数上。此外,非常欢迎任何优化我的代码的建议。

原来我是想重新发明轮子。我的问题的解决方案非常简单。我还调整了代码以使其更通用。

def turn_peaks_to_time_series(series):
    series_values = series.values
    series_index = series.index
    fig, ax1  = plt.subplots()
    
    x_of_peaks, _ = find_peaks(series_values, height=None)
    y_of_peaks = series_values[x_of_peaks]

    ax1.plot(series_index[x_of_peaks], y_of_peaks, "rp",label='peak') #plot peaks on graph
    ax1.plot(series_index,series_values) # plot df line
    plt.show()