Подгонка кривой Гаусса не работает с моими данными - PullRequest
0 голосов
/ 06 мая 2019

Я использую код, отправленный Луисом в качестве ответа на этот вопрос ( Подгонка лучшего гауссиана к точкам данных? ), и мне удалось его запустить и подогнать гауссову кривую к данным примера. Но когда я пытаюсь сделать то же самое с моими данными (пытаясь уместить гистограмму), я никогда не получаю кривую - только гистограмму. Спасибо за помощь в поиске проблемы / ошибки.

data.csv можно скачать здесь https://ufile.io/qg2nmkpe

from scipy.optimize import curve_fit

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

my_data = pd.read_csv("data.csv")
my_data = my_data['data'].tolist()


if (True): #True for example data, False for my dataset
    angles = [-8, -6, -4, -2, 0, 2, 4, 6, 8]
    data = [99, 610, 1271, 1804, 1823, 1346, 635, 125, 24]
    plt.plot(angles, data, "ob", label="Measured")
else:
    data, bins, _ = plt.hist(my_data, bins=60, alpha=0.5)
    angles = [0.5 * (bins[r] + bins[r + 1]) for r in range(len(bins) - 1)]  # center points of bins
    data = list(data)  # heights of bins
xlims = [min(angles), max(angles)]

angles = np.array(angles)
data = np.array(data)

n = len(data)  ## <---
mean = sum(data * angles) / n
sigma = np.sqrt(sum(data * (angles - mean) ** 2) / n)


def gaus(x, a, mu, sigma):
    return a * np.exp(-(x - mu) ** 2 / (2 * sigma ** 2))


popt, pcov = curve_fit(gaus, angles, data)  # ,p0=[0.18,mean,sigma])  ## <--- leave out the first estimation of the parameters
x = np.linspace(xlims[0], xlims[1], 60)  ## <--- calculate against a continuous variable

plt.plot(x, gaus(x, *popt), 'g', label='Fit')  ## <--- plot against the contious variable
plt.xlim(xlims[0], xlims[1])
plt.ylim(0, max(data) * 1.1)
plt.savefig('normal.png')
plt.show()

Ожидаемый результат - гистограмма моих данных с гауссовой кривой

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