Генерация нормального распределения с использованием недесятичных точек данных Matplotlib Python - PullRequest
0 голосов
/ 07 апреля 2020

Пока что я могу сгенерировать базовую c десятичную версию, как показано ниже: What I managed

Код, который я использовал для ее генерации:

import numpy as np
import matplotlib.pyplot as plt

plt.figure(figsize=(8,4))
x = np.linspace(-20,20,1000)
plt.plot(x,stats.norm.pdf(x,0,5),'r')
plt.plot(x,stats.norm.pdf(x,0,10),'b')
plt.title("Flattening the curve")
plt.savefig("graph.png")
plt.show()

Я хочу, чтобы оси X и Y начинались с 0 и отображали целые числа вместо плавающих значений. Нечто похожее на это, но в виде линейного графика вместо гистограммы:

What I want to generate

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

Ответы [ 2 ]

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

Используйте plt.ylim(ymin=0), чтобы позволить y начинаться с нуля. Установите x_mean на какое-либо значение, например, 90 в stats.norm.pdf(x, x_mean, 5) и установите x = np.linspace(x_mean-20, x_mean+20, 1000), чтобы сместить значения x.

Общая площадь pdf равна 1. Чтобы она была похожа по высоте на гистограмму, ее нужно умножить на общее количество предметов и поделить на ширину столбцов гистограммы (эти лотки должны быть равномерно распределены) ), что ослабляет, поскольку все больше людей становятся иммунными. Это не статистическая кривая распределения вероятностей, так как она показывает количество инфицированных людей с течением времени. Это видеофильм с номерами объясняет больше о таких кривых.

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

Ваше среднее значение равно 0, и поскольку нормальное распределение симметрично c относительно среднего, ваш график будет go по оси -ve. Поэтому сдвиньте среднее значение к положительному и начните значения x с 0

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

plt.figure(figsize=(8,4))
x = np.linspace(0,40,1000)
plt.plot(x,stats.norm.pdf(x, 20,5),'r')
plt.plot(x,stats.norm.pdf(x,20,10),'b')
plt.title("Flattening the curve")
plt.savefig("graph.png")
plt.show()

enter image description here

Ось y - это значения pdf так что

  • Площадь под кривой == 1
  • значение pdf неотрицательно

Чтобы получить целые числа, вы можете масштабировать все значения pdf на несколько постоянный коэффициент (скажем, 100), но график потеряет цель, если вы не упомянули явно используемое значение масштабирования. Вы должны проверить, почему вы хотите целые числа на оси у. Для масштабирования оси Y вы можете использовать

plt.plot(x,stats.norm.pdf(x, 20,5)*100,'r')

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