我在 python 中使用 loglog 函数绘制简单的二维图,如下所示:
plt.loglog(x,y,label='X vs Y');
X 和 Y 都是n
大小的浮点数列表。
我想在同一张图上画一条线。我试过 numpy.polyfit ,但我无处可去。
如果您的图表已经是对数刻度,您如何使用 polyfit 拟合一条线?
我在 python 中使用 loglog 函数绘制简单的二维图,如下所示:
plt.loglog(x,y,label='X vs Y');
X 和 Y 都是n
大小的浮点数列表。
我想在同一张图上画一条线。我试过 numpy.polyfit ,但我无处可去。
如果您的图表已经是对数刻度,您如何使用 polyfit 拟合一条线?
Numpy 不在乎 matplotlib 图形的轴是什么。
我假设您认为log(y)
是 的某个多项式函数log(x)
,并且您想找到那个多项式?如果是这种情况,则numpy.polyfit
使用数据集的对数运行:
import numpy as np
logx = np.log(x)
logy = np.log(y)
coeffs = np.polyfit(logx,logy,deg=3)
poly = np.poly1d(coeffs)
poly
现在是log(x)
返回的多项式log(y)
。为了拟合预测y
值,您可以定义一个仅对多项式求幂的函数:
yfit = lambda x: np.exp(poly(np.log(x)))
您现在可以在 matplotlib 图上绘制拟合线loglog
:
plt.loglog(x,yfit(x))
并像这样展示它
plt.show()
np.log(x)
提取自然对数,因此上述解决方案的拟合是在自然对数上完成的,同时plt.loglog
使用 10 基对数。
两个操作都应该在同一个基础上运行:
logx = np.log10(x)
logy = np.log10(y)
和
yfit = lambda x: np.power(10, poly(np.log(x)))
或者
yfit = lambda x: 10**(poly(np.log(x)))