создать более гладкую кривую для экспоненциальной функции - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть данные x, y (order, Hill), и я хочу, чтобы мои данные плавно помещались, однако мои кривые выглядят не плавно.Я использую curve_fit функцию и matplotlib

мой код выглядит следующим образом:

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


for i in range(len(hill_numbers)):
    Hill = np.array(hill_numbers[i])

    print Hill, order 

    popt, pcov = curve_fit(func, order, Hill, p0=(1, 1e-6, 1), maxfev=10000)


    plt.plot(order, Hill, ls="none", marker='.', color='grey')

    plt.plot(order, func(order, *popt),'-')



plt.xticks(np.arange(0, 3, step=1))


plt.xlabel('order q')
plt.ylabel('Hill numbers')
plt.show()

У меня есть следующие данные

Hill выглядит так:

[19.        12.14       7.5426009]
[19.        12.14       7.5426009]

и order

[0,1,2]
[0,1,2]

мой график выглядит так enter image description here

1 Ответ

0 голосов
/ 01 декабря 2018

Вам нужно определить точную х-сетку для построения непрерывной плавной линии следующим образом.Это делается с использованием, например, linspace в качестве order_fine = np.linspace(order[0], order[-1], 100) и последующей передачи order_fine в функцию построения графика с использованием коэффициентов подгонки *popt

import numpy as np
hill_numbers = [[19, 12.14, 7.5426009], [19, 17.14, 15.5426009]]
order = np.array([0,1,2])

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

for i in range(len(hill_numbers)):
    order_fine = np.linspace(order[0], order[-1], 100)
    Hill = np.array(hill_numbers[i])
    popt, pcov = curve_fit(func, order, Hill, p0=(1, 1e-6, 1), maxfev=10000)

    plt.plot(order, Hill, ls="none", marker='.', color='grey')
    plt.plot(order_fine, func(order_fine, *popt),'-')

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...