在 Python 中绘制趋势线

Plotting tendency line in Python

我想在数据图上绘制一条趋势线。这一定很简单,但我一直无法弄清楚如何去做。

假设我有以下内容:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame(np.random.randint(0,100,size=(100, 1)), columns=list('A'))
sns.lineplot(data=df)

ax.set(xlabel="Index",
       ylabel="Variable",
       title="Sample")

plt.show()

结果图是:

我想补充的是一条趋势线。类似于下面的红线:

感谢您的任何反馈。

你可以使用滚动平均来做这样的事情:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

data  = np.random.randint(0,100,size=(100, 1))

df["rolling_avg"] = df.A.rolling(7).mean().shift(-3)

sns.lineplot(data=df)

plt.show()

您还可以绘制回归图来分析如何使用以下方法对数据进行插值:

ax = sns.regplot(x=df.index, y="A", 
                 data=df,
                 scatter_kws={"s": 10},
                 order=10, 
                 ci=None)

移动平均线是一种方法(我的第一个想法,并且已经建议)。

另一种方法是使用多项式拟合。由于原始数据中有 100 个点,我在下面的示例中选择了 10 阶拟合(数据长度的平方根)。对您的原始代码进行一些修改:

idx = [i for i in range(100)]
rnd = np.random.randint(0,100,size=100)
ser = pd.Series(rnd, idx)

fit = np.polyfit(idx, rnd, 10)
pf = np.poly1d(fit)

plt.plot(idx, rnd, 'b', idx, pf(idx), 'r')

这段代码提供了这样的情节: