Центр двух нормальных кривых распределения Matplotlib Python - PullRequest
2 голосов
/ 07 апреля 2020

Я построил две кривые нормального распределения на графике, как показано ниже:

What I generated

Используя следующий код:

import random
import numpy as np
import matplotlib.pyplot as plt
d1 = np.array([random.randrange(0,100) for i in range(100)])
d2 = np.array([random.randrange(0,50) for i in range(100)])
d1,d2 = np.sort(d1),np.sort(d2)
d1_mean,d1_std = np.mean(d1),np.std(d1)
d2_mean,d2_std = np.mean(d2),np.std(d2)
# y = np.repeat(15,100)
plt.figure(figsize=(8,6))
plt.plot(d1,stats.norm.pdf(d1,d1_mean,d1_std)*1000,'r')
plt.plot(d2,stats.norm.pdf(d2,d2_mean,d2_std)*1000,'b')
# plt.hlines(y,d1.min(),d1.max(),'g')
plt.title("Flattening the curve")
plt.show()

Чего я хочу добиться, это:

What I want to achieve

Второй график легче построить, потому что оба средних для обеих кривых нормального распределения для выше График был таким же. Однако я не могу добиться того же самого с графиком в самом верху. Когда я устанавливаю среднее значение аналогичным образом, это происходит:

What I want to achieve2

Любые советы о том, как этого добиться? Буду признателен за любую оказанную помощь. Спасибо за чтение.

1 Ответ

0 голосов
/ 07 апреля 2020

Я думаю, что самый простой способ для генерации двух гауссовых кривых - это вставить значения x в диапазоне [-20, 20] в гауссову функцию с двумя различными значениями сигмы. Затем matplotlib установит границы вашего графика [-20, 20], и он будет сосредоточен вокруг 0.

import random
import numpy as np
import matplotlib.pyplot as plt

def gaussian(x, mu, sig):
    return 1./(np.sqrt(2.*np.pi)*sig)*np.exp(-np.power((x - mu)/sig, 2.)/2)

plt.figure(figsize=(8,6))
x_values = np.linspace(-20, 20, 200)

# generate gaussian curves with mu = 0, sigma = 5, 10
plt.plot(x_values, gaussian(x_values, 0, 5), color = 'blue')
plt.plot(x_values, gaussian(x_values, 0, 10), color = 'red')

plt.title("Flattening the curve")
plt.show()

enter image description here

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