如何用X轴找到趋势线并计算趋势线的斜率

时间:2019-09-14 13:27:04

标签: python python-3.x pandas matplotlib

我有一个如下所示的Pandas数据框:

 (5,)  # return the addresses for a 1-dimensional matrix of 5 columns,
 (4,3) # return the addresses for a 2-dimensional matrix of 4 columns and 3 rows.
 (5, 3, 2) # ditto for a 3D matrix 

我想绘制这些 UNDERLAY TIME 27,395 09:15:18 27,466 09:17:19 27,391 09:19:06 27,409 09:21:19 27,439 09:23:21 27,468 09:25:58 27,497 09:27:19 27,502 09:29:54 27,542 09:31:19 27,522 09:33:33 27,520 09:35:09 ... 值的趋势线,并计算X轴的斜率。

从下面的链接获得了一些帮助,但找不到坡度: How can I draw scatter trend line on matplot? Python-Pandas

1 个答案:

答案 0 :(得分:2)

seanborn.regplot是绘制情节的最快方法:

import seaborn as sns

df_plot = pd.DataFrame()
# seconds since midnight of each TIME value
df_plot['SECONDS'] = (pd.to_datetime(df['TIME']) - pd.Timestamp.now().normalize()).dt.total_seconds()
df_plot['UNDERLAY'] = pd.to_numeric(df['UNDERLAY'].str.replace(',', ''))

ax = sns.regplot(data=df_plot, x='SECONDS', y='UNDERLAY')
ax.set(
    xticklabels=pd.to_datetime(ax.get_xticks(), unit='s').strftime('%H:%M'),
    xlabel='Time',
    ylabel='Underlay'
)
plt.show()

输出:

Scatter plot with trendline

要获取回归函数,请使用numpy:

import numpy as np
f = np.polyfit(df_plot['SECONDS'], df_plot['UNDERLAY'], deg=1)

# Slope
f[0]

# Make a prediction at 21:00
# Time is expressed as seconds since midnight
np.polyval(f, 21*3600)