matplotlib [2.2.2] нормализованная гистограмма не суммируется с 1 - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь построить нормализованную гистограмму, используя python, но сумма не равна 1.

, например

import numpy as np
import matplotlib.pyplot as plt
x = np.random.randn(1000)
o = plt.hist(x, stacked=True, density=True)
print(sum(o[0])
# 1.5499931498813149

Поскольку ширина ячейки не равна единице, если вместо этого я проверяю площадь под кривой, она действительно равна 1, т.е.

print(sum(o[0]*np.diff(o[1]))
# 1.0

Но в разделе параметров density команды matplotlib manual указано, что

Если stacked также True, сумма гистограмм нормализуется до 1.

Почему именно тогда сумма гистограмм не нормируется на 1? И почему мне все еще нужно умножить его на ширину корзины? Что я читаю / делаю неправильно?

P.S. Я прошел через повторяющиеся вопросы, но они относятся к более старым версиям matplotlib, когда параметр normed не устарел. Поэтому я не думаю, что они больше полезны.

1 Ответ

0 голосов
/ 04 июля 2018

Если я прав, идея stacked состоит в том, что когда у вас есть несколько графиков, они будут «сложены» вместо того, чтобы идти рядом. Смотрите графики здесь https://matplotlib.org/examples/statistics/histogram_demo_multihist.html

Я запустил его с двумя наборами данных, и stacked, похоже, не меняет сами выходные значения, только графическое представление.

Если вы запустите

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(1)
x = np.random.randn(1000)
y = np.random.randn(1000)
hist = plt.hist([x,y], density=True, stacked=True)

plt.show()

Тогда и x, и y будут нормализованы, я полагаю, именно это и подразумевалось в части документации, которую вы цитировали.

В любом случае, вы не можете получить обе (1) сумму значений = 1 (2) сумму значений, умноженную на ширину ячейки = 1, если ширина ячейки не равна 1.

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