我有一些数据,已经在对数-对数图中绘制出来,现在我想通过这些点拟合一条直线。我已经尝试了各种方法,但是无法得到我想要的结果。以下是示例代码:
import numpy as np
import matplotlib.pyplot as plt
import random
x= np.linspace(1,100,10)
y = np.log10(x)+np.log10(np.random.uniform(0,10))
coefficients = np.polyfit(np.log10(x),np.log10(y),1)
polynomial=np.poly1d(coefficients)
y_fit = polynomial(y)
plt.plot(x,y,'o')
plt.plot(x,y_fit,'-')
plt.yscale('log')
plt.xscale('log')
这使我得到了一条理想的“直线”,在对数-对数图上通过一个随机数进行偏移,然后拟合一个1D多项式。输出结果如下:
![enter image description here](https://istack.dev59.com/ZyjMX.webp)
如何才能达到最佳效果?
10**np.log10(y_fit)
。不要对y_fit
取log10
,只需绘制10**y_fit
。 - Warren Weckessery_fit
的log10
,只是用10 ** y_fit
替换 - 我得到了 link。您的答案对我来说很有道理:将多项式拟合为 x/y 的 log10 值,然后将其拟合为 log10x 并绘制它。但我不确定为什么在最终绘制时要使用 10**,我也不确定为什么我的输出结果与您的不同! - BloodSexMagik