Рисование нормальной кривой в python - PullRequest
0 голосов
/ 12 апреля 2020

Я видел много документации о нормальном распределении и построении кривых в python, и я немного запутался в этом. Я сгенерировал нормальные случайные величины со средним значением 30 и стандартным отклонением 3.7 и с использованием функции norm.dist i. оценили функцию pdf

=NORM.DIST(A2,$H$2,$I$2,FALSE)

на основе этой формулы, я набросал точечную диаграмму и получил
enter image description here

я хочу для демонстрации Для того, чтобы сделать то же самое, используя python, я нашел scipy и версию numpy, пожалуйста, помогите мне прояснить ситуацию, вот некоторые из моих чисел

enter image description here

Я попробовал следующий код

from scipy.stats import norm
import  pandas as pd
import matplotlib.pyplot as plt
data_random =pd.read_excel("data_for_normal.xlsx")
data_values =data_random["NormalVariables"].values
pdf_values =norm.pdf(data_values,30,3.7)
plt.plot(data_values,pdf_values)
plt.title("normal curve")
plt.xlabel("x values")
plt.ylabel("probability density function")
plt.show()

, но получил enter image description here

результат:

print(data_random.head(10))
 NormalVariables
0        29.214494
1        30.170595
2        36.014144
3        30.388626
4        28.398749
5        24.861042
6        29.519316
7        24.207164
8        35.779376
9        26.042977

1 Ответ

1 голос
/ 13 апреля 2020
# plt.plot connects datapoints with lines:

x = [0,1,2]
y = [1,4,3]
plt.plot(x,y)

enter image description here

#note that lines are drawn between adjacent elements in the list,
#so a line from (0,1) to (1,4) and then to (2,3)

# if the order of the datapoints is changed, the position of the datapoints 
# remains unchanged, but now lines are drawn between different points

x = [2,0,1]
y = [3,1,4]
plt.plot(x,y)

enter image description here

Таким образом, причина, по которой вы видите все перекрещивание на вашем участке является то, что вы строите несортированные данные.

Если вы просто хотите скопировать сюжет из Excel, используйте plt.scatter. Этот график только точки данных и не рисует связи между ними.

x = [2,0,1]
y = [3,1,4]
plt.scatter(x,y)

enter image description here

...