scipy 如何将幂律拟合到 Dataframe 并绘制它?

mnemlml8  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(195)

我在 Dataframe 中有两列(rcs、range)。
| 无线通信系统|范围|
| - -|- -|
| -40年|12.9分|
| -35个|十四点九分|
| -30个|二十二点九|
| -25天|三十五点四十四分|
| -20个|四十三点四十八分|
| -15年|六十二点四|
| -10个|九十二点四|
| -5个|一百三十二块九十九|
| 第0页|一百八十二点六|
| 五个|二百五十二块九十九|
我想用方程rcs = range ^4绘制一条曲线
我尝试了下面1.as的一个多项式曲线拟合

def curve_gen(x,a,b,c,d,e):  #for polynomial
    return (a*(x**4))+(b*(x**3))+(c*(x**2))+(d*x)+e

y = df['rcs'].values
x = df['range'].values
pop,_ = curve_fit(curve_gen,x,y)
a,b,c,d,e = pop
pl.scatter(y,x)
pl.plot(curve_gen(x,a,b,c,d,e),x,color = 'red')
pl.show()

x1c 0d1x在上图中,曲线不是平滑曲线,并且不是从-40开始
2.幂律曲线拟合

def power_law(x,a):  
    return a*np.power(x,4)

y = df['rcs'].values
x = df['range'].values
pop,_ = curve_fit(power_law,x,y)
a = pop
pl.scatter(y,x)
pl.plot(power_law(x,a),x,color = 'red')
pl.show()

这一条给了我一个错误的图。红线没有通过蓝点

如何使用curve_fit?和plot解决上述问题

ozxc1zmp

ozxc1zmp1#

您可以使用numpy.polyfitnumpy.poly1d


# initial data

plt.plot(df['rcs'], df['range'], marker='o', ls='', label='data')

# fit

fit = np.polyfit(df['rcs'], df['range'], deg=4)

# array([1.87062937e-05, 4.24655012e-03, 3.34652273e-01, 1.20759569e+01,

# 1.83604091e+02])

# get X range

X = np.arange(df['rcs'].min(), df['rcs'].max()+1)

# plot mapped fit onto X

plt.plot(X, np.poly1d(fit)(X), label='fit')

输出:

相关问题