如何将非线性模型转化为线性?

时间:2016-09-22 17:38:30

标签: python matplotlib plot scipy linear-regression

我正在分析数据集,我知道数据应遵循功率模型:

y = a*x**b

我通过取对数将其转换为线性:

ln(y) = ln(a) + b* ln(x)

然而,在向情节添加趋势线时会出现问题

slope, intercept, r_value, p_value, std_err = scipy.stats.mstats.linregress(x_ln, y_ln)
yy = np.exp(intercept)*wetarea_x**slope
plt.scatter(wetarea_x, arcgis_wtrshd_x, color = 'blue')
plt.plot(wetarea_x, yy, color = 'green')

enter image description here

这是我用这段代码得到的。 如何修改代码,使图上的趋势线正确?

1 个答案:

答案 0 :(得分:5)

当您在matplotlib中绘制线条图时,您的绿色奇怪图形会被取消,x值未排序。它是一个线条图,但是它按行(x,y)连接左右两边连接(在你的特定情况下,它看起来像回到x-origin附近)。这给了这些奇怪的模式。

你不会对蓝色情节有这个问题,因为它是一个散点图。

尝试使用numpy.argsort根据第一个数组的索引对两个数组进行排序后调用绘图,比如说

wetarea_x[np.argsort(wetarea_x)]

yy[np.argsort(wetarea_x)]