Гистограмма с наложенным PDF - PullRequest
0 голосов
/ 08 мая 2019

Исходя из моего предыдущего вопроса , следующий код

import pandas as pd
import matplotlib.pyplot as plt
import scipy.stats as stats
import numpy as np
import seaborn as sns


length = 1000
np.random.seed(100)

dictOne = {
           "A": np.random.randn(length),
           "B": np.random.randn(length),
           "C": np.random.randn(length)
           }
df2 = pd.DataFrame(dictOne)

column = 'B'

fig, ax = plt.subplots()
df2[df2[column] > -999].hist(column, alpha = 0.5, density = False, ax = ax, bins = 100)
param = stats.norm.fit(df2[column].dropna())   # Fit a normal distribution to the data
x = np.linspace(*df2[column].agg([min, max]), 1000) # x-values

pdf_fitted = (x, stats.norm.pdf(df2[column], *param))
plt.plot(x, stats.norm.pdf(x, *param), color = 'r')

производит enter image description here при density = False и enter image description here когда density = True.

Мой вопрос: как мне объединить гистограмму из первого графика, который показывает истинный счетчик каждого значения случайного числа, с кривой из второго графика?Нужно ли использовать две разные оси Y, одну для подсчета и одну для PDF?

1 Ответ

0 голосов
/ 08 мая 2019

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

import pandas as pd
import matplotlib.pyplot as plt
import scipy.stats as stats
import numpy as np; np.random.seed(100)

length = 1000

df2 = pd.DataFrame(np.random.randn(length, 3), columns=list("ABC"))

column = 'B'
df = df2[df2[column] > -999]

fig, ax = plt.subplots()
h, edges, _ = ax.hist(df[column], alpha = 0.5, density = False, bins = 100)

param = stats.norm.fit(df[column].dropna())   # Fit a normal distribution to the data
x = np.linspace(*df[column].agg([min, max]), 1000) # x-values

binwidth = np.diff(edges).mean()
ax.plot(x, stats.norm.pdf(x, *param)*h.sum()*binwidth, color = 'r')

plt.show()

enter image description here

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