На самом деле ваш код почти работает, вам просто нужно нормализовать гистограмму. scipy.stats.norm возвращает нормализованную кривую, то есть интеграл кривой равен 1.
В вашем случае вы, вероятно, имеете очень низкую кривую, почти сплющенную на оси x, которую вы не можете видеть.
Чтобы нормализовать гистограмму, просто передайте параметр density = True
в функцию hist
:
plt.hist(arr, num_bins, density=True, facecolor='yellow', alpha=0.5)
Например, следующий код (небольшая переделка вашего):
from matplotlib import pyplot as plt
import numpy as np
import scipy.stats as stats
import math
def testHistogram(arr, mean, variance):
# histogram
num_bins = 100
plt.hist(arr, num_bins, density=True, facecolor='yellow', alpha=0.5)
# plot
mu = mean
sigma = math.sqrt(variance)
x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100)
plt.plot(x, stats.norm.pdf(x, mu, sigma))
plt.grid(True)
plt.show()
mm = 100 #norm mean valu
vv = 40 #norm variance
#x is an array of 100 random numbers from the normal distribution
x = np.random.normal(mm, math.sqrt(vv), 100)
testHistogram(x, mm, vv)
рисует следующую фигуру:
