我正在分析数据集,我知道数据应遵循功率模型:
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')
这是我用这段代码得到的。 如何修改代码,使图上的趋势线正确?
答案 0 :(得分:5)
当您在matplotlib
中绘制线条图时,您的绿色奇怪图形会被取消,x
值未排序。它是一个线条图,但是它按行(x,y)连接左右两边连接(在你的特定情况下,它看起来像回到x-origin附近)。这给了这些奇怪的模式。
你不会对蓝色情节有这个问题,因为它是一个散点图。
尝试使用numpy.argsort
根据第一个数组的索引对两个数组进行排序后调用绘图,比如说
wetarea_x[np.argsort(wetarea_x)]
和
yy[np.argsort(wetarea_x)]