【问题标题】:Best fitting line for a scatter plot散点图的最佳拟合线
【发布时间】:2017-02-25 00:29:39
【问题描述】:

如果我不知道 2 个轴之间的关系,有什么方法可以找到散点图的最佳拟合线(否则我可以使用 scipy.optimize)。我的散点图看起来像这样

我想要这样一条线 我需要得到最佳拟合线的点以便进一步计算

for j in lat :
l=94*j
i=l-92
for lines in itertools.islice(input_file, i, l):
    lines=lines.split()
    p.append(float(Decimal(lines[0])))
    vmr.append(float(Decimal(lines[3])))
    plt.scatter(vmr, p)

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    您可以使用LOWESS (Locally Weighted Scatterplot Smoothing),一种非参数回归方法。

    Statsmodels 有一个实现here,您可以使用它来适应您自己的平滑器。

    有关使用 Statsmodels 实现的示例,请参阅此 StackOverflow question on visualizing nonlinear relationships in scatter plots

    您还可以使用 Seaborn 可视化库的 regplot() 函数中的实现,并带有关键字参数 lowess=True。详情请参阅Seaborn documentation

    以下代码是使用Seaborn 和来自上述 StackOverflow 问题的数据的示例:

    import numpy as np
    import seaborn as sns
    sns.set_style("white")
    
    x = np.arange(0,10,0.01)
    ytrue = np.exp(-x/5.0) + 2*np.sin(x/3.0)
    
    # add random errors with a normal distribution                      
    y = ytrue + np.random.normal(size=len(x))
    
    sns.regplot(x, y, lowess=True, color="black", 
                line_kws={"color":"magenta", "linewidth":5})
    

    【讨论】:

      【解决方案2】:

      这可能不是 matplotlib 问题,但我认为您可以使用 pandas 做这种事情,使用滚动中位数。

      smoothedData = dataSeries.rolling(10, center = True).median()
      

      实际上,您可以对任何东西进行滚动中位数,但 pandas 有一个内置功能。 Numpy 也可以。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-06
        • 2014-04-09
        • 1970-01-01
        • 2022-07-10
        • 1970-01-01
        • 2018-07-01
        相关资源
        最近更新 更多