首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Python绘制趋势线

用Python绘制趋势线
EN

Stack Overflow用户
提问于 2020-10-29 16:29:30
回答 2查看 486关注 0票数 1

我想在数据图上画一条趋势线。这一定很简单,但我还没有想出如何做到这一点。

让我们说我有以下几点:

代码语言:javascript
运行
复制
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()

由此产生的阴谋是:

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

我感谢你的反馈。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-29 17:04:10

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

代码语言:javascript
运行
复制
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()

您还可以做一个回归图来分析如何使用以下方法插入数据:

代码语言:javascript
运行
复制
ax = sns.regplot(x=df.index, y="A", 
                 data=df,
                 scatter_kws={"s": 10},
                 order=10, 
                 ci=None)

票数 2
EN

Stack Overflow用户

发布于 2020-10-29 17:27:37

移动平均法是一种方法(我第一次想到,并且已经建议了)。

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

代码语言:javascript
运行
复制
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')

此代码提供了如下情节:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64595327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档