首页 > 解决方案 > 使用 timedelta 在图形上正确对齐峰值

问题描述

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

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功能上。此外,非常欢迎任何优化我的代码的建议。

标签: pythondatetimescipynumpy-ndarraytimedelta

解决方案


原来我试图重新发明轮子。我的问题的解决方案非常简单。此外,我将代码调整为更通用。

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()

正确的结果


推荐阅读