Python 使用对数刻度上的matplotlib拟合曲线

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

我使用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
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
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)))