猿问

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

结果图是:

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

https://img1.sycdn.imooc.com/65b4af090001db4411680711.jpg


千万里不及你
浏览 155回答 2
2回答

杨魅力

移动平均线是一种方法(我的第一个想法,并且已经建议)。另一种方法是使用多项式拟合。由于原始数据中有 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')此代码提供了如下图:

偶然的你

您可以使用滚动平均值执行类似的操作:import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snsdata  = 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)
随时随地看视频慕课网APP

相关分类

Python
我要回答