Python - построение графика нормального распределения со списком данных - PullRequest
0 голосов
/ 19 сентября 2018

Я работаю над проектом по электротехнике, который требует построения графика нормального распределения списка данных.

Мы случайным образом измерили сопротивление 30 резисторов и записали их.

X = [14,95, 14,94, 14,92, 14,98, 16,53, 14,96, 16,20, 14,32, 15,32, 14,25, 15,36, 14,95, 15,13, ​​14,26, 14,94, 15,6, 15,20, 14,94, 15,02, 15, 14,62, 14,94, 14,94, 14,98, 15,12, 15,06, 14,95, 14,96, 15,13, ​​15,20]

Я хочу получить такой график:

enter image description here

Но я получаю график, подобный этому:

enter image description here

Мне нужно получить больше значений на графике, где данные близки к среднему значению.

Это код, который я сейчас использую:

import numpy as np
from matplotlib import pyplot as plt
import math

X = [14.95, 14.94, 14.92, 14.98, 16.53, 14.96, 16.20, 14.32, 15.32, 14.25, 15.36, 14.95, 15.13, 14.26, 14.94, 15.6,
     15.20, 14.94, 15.02, 15, 14.62, 14.94, 14.94, 14.98, 15.12, 15.06, 14.95, 14.96, 15.13, 15.20]

X = np.sort(X)
mean = np.mean(X)

sigma = 0

for i in X:
    sigma += np.square(mean - i)

sigma = np.sqrt(sigma / (len(X) - 1))


def func(x):
    return np.exp(np.square(x - mean) / (2 * np.square(sigma))) / np.sqrt(2 * math.pi * sigma)


Y = []

for i in X:
    Y.append(func(i))

plt.plot(X, Y, marker='o', color='b')
plt.show()

1 Ответ

0 голосов
/ 19 сентября 2018

Предполагая, что я правильно понял ваш вопрос, который, я думаю, вы просто пытаетесь добавить больше точек данных для создания кривой нормального распределения.

mu = np.mean(X)
sigma = np.std(X) #You manually calculated it but you can also use this built-in function
data = np.random.normal(mu, sigma, SIZE_OF_DATA_YOU_NEED)

Однако, если вы также просто пытаетесь сформироватьНормальная кривая распределения, вы не можете просто построить каждое значение в зависимости от его функции плотности вероятности.

Попробуйте

count, bins, ignored = plt.hist(data, 30, normed=True)
plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) * np.exp( - (bins - mu)**2 / (2 * sigma**2) ),linewidth=2, color='r')
plt.show()

Возможно, вы захотите объединить X и с новыми точками данных.

Надеюсь, что это поможет каким-то образом, также добавив ссылку на numpy.random.normal () на случай, если это поможет каким-либо образом (https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.random.normal.html).

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