如何向 Python 中的非组织点添加趋势线

How to add a trendline to non organized points in Python

我想将几个未组织的点拟合到 Python 中的趋势线, 类似 excel 的东西在这张图片中做了:

当我在 Python 中尝试使用 scipy 时,这就是我得到的结果:

def fit_ocr2(x,a,b):
    return a*np.log(x)+b
param2, param_cov2 = curve_fit(fit_ocr2, x_ocr, y)
a2 = param2[0]
b2 = param2[1]
test_fit2 = fit_ocr2(x_ocr,a2,b2)

fig0 = plt.figure(0,figsize=(5,10))
plt.plot(x_ocr, y, 'o', label='data')
plt.plot(x_ocr, test_fit2, '.-', label='fit2')
plt.legend()

我应该怎么做才能在 Python 中获得相同的结果(只有一条趋势线)?

标题表明您了解正在发生的事情。您正在为曲线绘制多个和弦,因为这些点未排序。

正如@cheetah 在评论中提到的,您可以简单地使用一个 linspace 来给出排序点。

def fit_ocr2(x,a,b):
    return a*np.log(x)+b
param2, param_cov2 = curve_fit(fit_ocr2, x_ocr, y)
a2 = param2[0]
b2 = param2[1]
x_fit = np.linspace(min(x_ocr), max(x_ocr), 1000);
y_fit = fit_ocr2(x_fit,*param2)

fig0 = plt.figure(0,figsize=(5,10))
plt.plot(x_ocr, y, 'o', label='data')
plt.plot(x_fit, y_fit, '.-', label='fit')
plt.legend()

另一种选择是设置 x_fit = np.sort(x_ocr)