在loglog规模上使用matplotlib拟合曲线

时间:2013-09-12 09:48:26

标签: python numpy matplotlib

我正在使用python中的loglog函数绘制简单的2D图形,如下所示:

plt.loglog(x,y,label='X vs Y');

X和Y都是n大小的浮点数列表。

我想在同一个图表上插入一行。我试过numpy.polyfit,但我无处可去。

如果你的图表已经是loglog规模,你如何使用polyfit拟合一条线?

2 个答案:

答案 0 :(得分:14)

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()

答案 1 :(得分:0)

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)))