Гистограмма Pyplot - получение точных значений x из автоматических корзин - PullRequest
0 голосов
/ 11 марта 2019

У меня есть два массива данных, для которых я строю гистограмму, используя pyplot:

data1 = numpyArray1
data2 = numpyArray2

Они не имеют одинаковый размер, поэтому я использую опцию density=True для их правильного сравнения.Я также позволяю pyplot автоматически выбирать ячейки, так как данные являются плавающими, и я не собираюсь автоматически (если это абсолютно необходимо) создавать ограничения.

fig, ax = plt.subplots(....)
ax[...].hist([data1, data2], bins = 30, density = True, histtype='step)

Пример:

plot

Вопросы:

  1. Можно ли предположить, что ячейки одинаковы для обоих распределений?
  2. Как я могу увидеть (или, что еще лучше, получить) автоматические ограничения бина, которые создал pyplot?( В этом вопросе предполагается, что ячейки представляют собой целые числа, не действительные для меня )
  3. (optinal) Могу ли я как-нибудь получить точку пересечения двух кривых?( Этот вопрос предполагает гауссово распределение, которое не решает мою проблему )

1 Ответ

1 голос
/ 11 марта 2019

Из документов , hist вернется

n: массив или список массивов. Значения гистограммы бинов.

бункеры: края бункеров.

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

Так что используйте:

freqs, bins, _ = ax[...].hist([data1, data2], bins = 30, density = True, histtype='step)

В ответ на ваши вопросы :

Можно ли предположить, что корзины одинаковы для обоих распределений?

Да, так как они возвращаются в одном вызове

Как я могу увидеть (или, что еще лучше, получить) ограничения автоматического бина, созданные pyplot? (Этот вопрос предполагает, что ячейки являются целыми числами, не для меня)

с bins (см. Код)

(optinal) Могу ли я как-нибудь получить точку пересечения двух кривых? (Этот вопрос предполагает гауссово распределение, которое не решает мою проблему)

Получите частоты и нормализуйте их, затем посмотрите, когда одно пересекает другое. Пример (с freq, определенным выше):

freqA, freqB = freq
freqA /= freqA.sum()
freqB /= freqB.sum()
ix = np.diff(np.sign(f[0] - f[1])).nonzero()   # check where sign changes (curves cross)
intersections = (bins[ix] + bins[ix + 1]) / 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...