【问题标题】:Python: polynomial fit of a scatter plot [duplicate]Python:散点图的多项式拟合
【发布时间】:2019-10-22 06:22:32
【问题描述】:

我的dataframe 有两个列,比如xy。下图显示了xyscatter plot

基于散点图,我使用以下代码进行线性拟合,从而得到下图中的蓝色直线。

fig, ax = plt.subplots(nrows=1, ncols=1)
ax.scatter(df['x'], df['y'])
b, m = polyfit(df['x'], df['y'], 1)
ax.plot(df['x'], b + m * df['x'], 'blue', linewidth=1)

现在,我想制作散点图的另一条拟合曲线,可能是多项式。想要的结果类似于上图中的红色曲线。我尝试使用来自here 的以下内容。

coefs = np.polyfit(df['x'], df['y'], 2)
p = np.poly1d(coefs)
plt.plot(df['x'], df['y'], "bo", markersize= 2)
plt.plot(df['x'], p(df['x']), "r-")

但我的数据结果不正确,如下所示。

我应该怎么做?
编辑:数据是here

【问题讨论】:

  • fit 是基于数据传播创建的[主要分组之外的几个点增加了计算错误]。可以删除主流数据以外的所有点,再试一次。或者您可以使用权重应用于样本点的 y 坐标
  • @Zaraki Kenpachi。我不介意包含有风险的异常值。问题是,如您所见,曲线不是单一的,而是来回多条线。
  • 发布链接到你的数据,然后我尝试找到解决方案
  • 问题出在排序上,看看下面的答案。对于线性拟合,您看不到它,因为在直线上的点之间来回走动仍然是直线路径

标签: python pandas matplotlib regression


【解决方案1】:

根据 Zaraki Kenpachi 发布的链接,尝试在您现有的拟合和绘图代码之前添加 df = df.sort_values(by='x')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多