使用 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()
我正在使用 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()