Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x numpy多边形拟合的问题_Python 3.x_Numpy - Fatal编程技术网

Python 3.x numpy多边形拟合的问题

Python 3.x numpy多边形拟合的问题,python-3.x,numpy,Python 3.x,Numpy,出于某种原因,我的polyfit离我太远了,我不明白为什么会这样。我的散点图看起来很正常 我怎样才能解决这个问题?这是我的密码: def plot(data, x_axis, y_axis, title): x = data[0] y = data[1] ## Plot data plt.figure(figsize=(8,4)) plt.scatter(x, y) idx = np.isfinite(x) & np.isfinit

出于某种原因,我的polyfit离我太远了,我不明白为什么会这样。我的散点图看起来很正常

我怎样才能解决这个问题?这是我的密码:

def plot(data, x_axis, y_axis, title):
    x = data[0]
    y = data[1]

    ## Plot data
    plt.figure(figsize=(8,4))
    plt.scatter(x, y)

    idx = np.isfinite(x) & np.isfinite(y)
    plt.plot(np.poly1d(np.polyfit(x[idx], y[idx], 3)))

    ## Format graph
    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
    plt.gca().xaxis.set_major_locator(mdates.YearLocator(3))       
    plt.gcf().autofmt_xdate()

    ## Define labels
    plt.xlabel(x_axis)
    plt.ylabel(y_axis)
    plt.title(title)

    ## Graph data
    plt.show()
如果我需要链接我的数据,那么我可以。内容太多,无法在这里发布

检查

print(x[idx])
print(y[idx])
显示正确的值,但没有显示任何错误

编辑: 我已经想出了解决办法。我没有正确使用polyfit

    idx = np.isfinite(x) & np.isfinite(y)
    avgTrend = np.poly1d(np.polyfit(x[idx], y[idx], 3))
    plt.plot(x, avgTrend(x), color='red')

问题似乎在于多项式的次数。对于如此多的数据点,可能根本不可能拟合一个好的3次多项式。您可以尝试更高的阶数(不太可能以您想要的方式工作),也可以尝试样条函数

例如,您可以尝试实现平滑样条线的csaps包,我可以推荐它


希望这有帮助。问题似乎出在多项式的次数上。对于如此多的数据点,可能根本不可能拟合一个好的3次多项式。您可以尝试更高的阶数(不太可能以您想要的方式工作),也可以尝试样条函数

例如,您可以尝试实现平滑样条线的csaps包,我可以推荐它


希望这有帮助

我觉得应该删除1983年的数据点,因为它们看起来确实是异常值,但我现在不想删除它们。我没有做太多的研究,所以1983年可能会有一些重大事件。我觉得我应该删除1983年的数据点,因为它们看起来确实是异常值,但我现在不想删除它们。我没有做太多的研究,所以在1983年可能会有一些重大事件。我最终使它发挥了作用。我想问题是,我没有传递日期,所以这就是为什么趋势线没有与散点图正确对齐。我在底部上传了我的解决方案,并附上了一张图表。最后我让它开始工作。我想问题是,我没有传递日期,所以这就是为什么趋势线没有与散点图正确对齐。我在底部上传了我的解决方案,并附上了一张图表。