matplotlib 如何绘制线性回归到一段直线

disho6za  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(119)

我用matplotlib将一些数据绘制成250点长的线。我可以拟合整个数据集。然而,我希望使用最小二乘法拟合并绘制回归线到最后50个数据点。最好的方法是什么?(下面是我的绘图代码。)

j = 0
for line, rank in sortedSymbols:
    series = getattr(self, line)["CLOSE"]
    dates = pd.to_datetime(getattr(self, line)["DATE"]).dt.date
    ax.plot(dates.iloc[-250:], series.iloc[-250:]/series.iloc[-250] * (40+j), label = line)
    j += 10
20jt8wwn

20jt8wwn1#

有很多不同的方法可以做到这一点。但是如果没有关于数据结构的更多信息以及您需要的确切信息,这是一种可以做到的方法。np.polyfit()(文档here)对列表或数组中的顺序数据使用OLS回归。

import numpy as np

j = 0
for line, rank in sortedSymbols:
    series = getattr(self, line)["CLOSE"]
    dates = pd.to_datetime(getattr(self, line)["DATE"]).dt.date

    #Calculate the slope and intercept of fitted curve based on last 50 datapoint using the values 
    #you plotted before with 1 specified for a linear best fit line
    slope, intercept = np.polyfit(dates.iloc[-50:].index,series.iloc[-50:]/series.iloc[-250] * (40+j),1)

    #plot the trend line
    ax.plot(dates.iloc[-50:],slope*dates.iloc[-50:].index+intercept,label=line)

    j += 10

相关问题