Построение двух теоретических PDF-файлов с каждым набором данных двух гистограмм - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь согласовать две гистограммы с двумя кривыми PDF, используя следующий код (из Подгонка гистограммы с помощью python ):

datos_A = df['KWH/hh (per half hour) ']
datos_B = df['Response KWH/hh (per half hour) ']
(mu_A, sigma_A) = norm.fit(datos_A)
(mu_B, sigma_B) = norm.fit(datos_B)
n, bins, patches = plt.hist([datos_A , datos_B], 16, normed=1)
y_A = mlab.normpdf(bins, mu_A, sigma_A)
y_B = mlab.normpdf(bins, mu_B, sigma_B)
l = plt.plot([bins, bins], [y_A, y_B], 'r--', linewidth=2)
plt.grid(True)
plt.show()

Тем не менее, я получаю что-то вроде этого:

graph with vertical red lines

Вместо двух строк PDF для каждой гистограммы я получаю эти вертикальные линии. Я пытался исправить это многими способами, но я все еще не могу понять это.

После корректировки кода я получаю эти две строки, однако они не являются плавными кривыми.

graph with straight lines

1 Ответ

0 голосов
/ 15 ноября 2018

Это потому, что plt.plot строит графики для каждой строки кривой. Это означает, что в соответствии с вашим примером она строит n вертикальных линий, поскольку координаты x равны (bins[i], bins[i]) для всех линий.

Чтобы исправить это, измените строку:

l = plt.plot([bins, bins], [y_A, y_B], 'r--', linewidth=2)

до:

l_A = plt.plot(bins, y_A, 'r--', linewidth=2)
l_B = plt.plot(bins, y_B, 'b--', linewidth=2)

ИЛИ:

l = plt.plot(bins, np.stack([y_A, y_B]).T, '--', lw=2)

EDIT

Чтобы получить более плавные линии, вы можете повторно сэмплировать ячейки следующим образом:

N_resample = 100
bins_resampled = np.linspace(min(bins), max(bins), N_resample)
y_A = mlab.normpdf(bins_resampled, mu_A, sigma_A)
y_B = mlab.normpdf(bins_resampled, mu_B, sigma_B)
l = plt.plot(bins_resampled, np.stack([y_A, y_B]).T, '--', lw=2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...