Python 使用对数刻度上的matplotlib拟合曲线
我使用python中的loglog函数绘制简单的2D图形,如下所示:Python 使用对数刻度上的matplotlib拟合曲线,python,numpy,matplotlib,Python,Numpy,Matplotlib,我使用python中的loglog函数绘制简单的2D图形,如下所示: plt.loglog(x,y,label='X vs Y'); X和Y都是n大小的浮点数列表 我想在同一张图上画一条线。我试过numpy.polyfit,但我一无所获 如果图形已处于对数刻度,如何使用polyfit拟合直线?Numpy不关心matplotlib图形的轴是什么 我假设你认为log(y)是log(x)的多项式函数,你想找到那个多项式吗?如果是这种情况,则在数据集的对数上运行: import numpy as np
plt.loglog(x,y,label='X vs Y');
X和Y都是n
大小的浮点数列表
我想在同一张图上画一条线。我试过numpy.polyfit,但我一无所获
如果图形已处于对数刻度,如何使用polyfit拟合直线?Numpy不关心matplotlib图形的轴是什么 我假设你认为log(y)是log(x)的多项式函数,你想找到那个多项式吗?如果是这种情况,则在数据集的对数上运行:
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)))
现在,您可以在matplotlibloglog
plot上绘制装配线:
plt.loglog(x,yfit(x))
然后像这样展示
plt.show()
np.log(x)
提取自然对数,因此上述解决方案在自然对数上进行拟合,而plt.loglog
在10个基本对数上进行拟合
两个操作应在同一个基础上运行:
logx = np.log10(x)
logy = np.log10(y)
及
或
你能告诉我们你试过什么吗?谢谢,我需要学习多项式拟合的基本知识,我在coeff和yfitSo方面遇到了问题,这里我们在logx中取了一个与logy相匹配的三次多项式。然后以f(logx)的指数计算y的新值。我用ax.plot绘图,所以不在对数刻度上。它实际上对我的数据起了作用。但我不明白为什么?我不知道我是否理解你的评论。对(log(x),log(y))数据拟合多项式,然后绘制x和y?你为什么认为这不管用?如果log(y)=P(log(x)),其中P是某个多项式,那么根据yfit的定义,y=exp(P(log(x))=yfit(x)。plt.plot(x,yfit(x))将显示良好的拟合,前提是P本身适合数据的日志。
yfit = lambda x: np.power(10, poly(np.log(x)))
yfit = lambda x: 10**(poly(np.log(x)))