Scipy Draw Exponential - Как мне лучше подойти? - PullRequest
0 голосов
/ 24 января 2019

Я новичок в черчении в Python, поэтому, пожалуйста, потерпите меня. Я много искал и читал сегодня, но не могу понять это.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from scipy.optimize import curve_fit

def exp_func(x,a,b,c):
    return a*np.exp(-b*x)+c

x = np.array(df_auction_cat['AgeAdj'])
y = np.array(df_auction_cat['SP/ABCost'])

plt.scatter(x, y, s=50, cmap='Blues', alpha=0.7, edgecolor='gray', linewidth=1)
popt, pcov = curve_fit(exp_func, x, y)
plt.plot(x, exp_func(x, *popt))

Ранее в коде я манипулировал некоторыми данными и собирал набор данных df_auction_cat. Разброс выглядит так, а экспонента совсем не подходит:

enter image description here

Любая помощь будет высоко ценится. Точки данных ниже:

AgeAdj SP/ABCost
26 0.051851813
8 0.342104363
28 0.142081738
23 0.1
22 0.056330527
19 0.157692308
18 0.157301407
17 0.15
17 0.236690872
17 0.173041737
14 0.223076923
12 0.247294549
12 0.242445636
10 0.464864865
17 0.233333333
17 0.253333333
10 0.292307692
28 0.126554024
19 0.322973634
14 0.270684988
18 0.174560858
12 0.203654335
23 0.133144882
17 0.119076601
12 0.381578947
17 0.232747811
14 0.365465999
11 0.574056541
19 0.153471963
29 0.128023925
15 0.164999835
28 0.140513444
22 0.089770069
16 0.16001412
15 0.283422611

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Хорошо, так что я понял это! Я не понял, что вы должны отсортировать значения х в порядке возрастания. Я также представил первоначальное предположение в этой строке кода:

popt, pcov = curve_fit(exp_func, x, y, p0=(0.7,0.1,1))

Я попытался построить график без сортировки и увидел это. Я читал о необходимости сортировки значений. enter image description here

Сортировка исправила проблему: enter image description here

0 голосов
/ 24 января 2019

Я создал свой собственный x, y и работал, вы можете опубликовать свои входные данные?

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from scipy.optimize import curve_fit

def exp_func(x,a,b,c):
    return a*np.exp(-b*x)+c

x = np.array(range(0,100))
y = np.array(exp_func(x,0.1,0.1,.1)*50+np.random.rand(100))

plt.scatter(x, y, s=50, cmap='Blues', alpha=0.7, edgecolor='gray', linewidth=1)
popt, pcov = curve_fit(exp_func,x, y)
plt.plot(x, exp_func(x, *popt))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...