#python #histogram #gaussian #curve
#python #гистограмма #гауссовская #кривая
Вопрос:
У меня есть одни данные примерно такого рода, но с 1000 точками: дроби = [ 85,86,78,89,73,80,85,79,……83] ( мы могли бы предположить 1000 случайных точек между (70,90)
(редактировать: я хочу, чтобы максимальная высота гауссовой кривой совпадала с максимальной высотой гистограммы.)
И я хочу сравнить это с кривой гаусса, заданной
def quasars_gaussian_curve(mu= 45,sigma=0.35):
x = np.linspace(mu - 3*sigma, mu 3*sigma, 100)
plt.plot(x, stats.norm.pdf(x, mu, sigma)
Итак, когда я делаю это:
quasars_gaussian_curve (mu, сигма))
plt.hist(fraction,density = 1)
plt.show()
Я получаю это :
! [Гистограмма против гауссовской: мне нужно, чтобы гауссовская имела ту же высоту, что и моя гистограмма]https://imgur.com/hqrnfCH
Комментарии:
1.
normed=True
в plt.hist2. normed был снижен до ‘density’, и я использовал это в своем примере тоже.
3. Извините, позвольте мне перефразировать мой вопрос. Я хочу, чтобы максимальная высота гауссова была такой же, как у гистограммы.
Ответ №1:
ОК. Итак, есть этот пакет astropy для Python. Не знал, что у него есть этот класс Gaussian1D в astro fitting and modeling. Если кто-то сталкивается с такими же проблемами, даже если это не астрономия, и хочет подогнать кривую Гаусса к их заданной амплитуде, среднему значению и стандартному отклонению, это, вероятно, идеальное решение. И, вероятно, самый короткий
Вот как я это сделал.
from astropy.modeling.models import Gaussian1D
def fit_gaussian_curve():
g1 = Gaussian1D(0.11,44,0.35 )
x = np.linspace(44 - 3*0.35, 44 3*0.35, 100)
plt.plot(x,g1(x))
(Максимальная высота гистограммы составляла около 0,11, среднее значение 44 и сигма 0,35)
И вот мой график сейчас. Сравните это с предыдущим, миссия завершена.
!https://imgur.com/MYraeeD Дополнительная информация здесь: http://docs.astropy.org/en/stable/modeling/