Гистограммы Python: ручная нормализация подсчетов и повторное построение в виде гистограммы

Я попытался найти что-то похожее, и самое близкое, что я мог найти, было этой что помогло мне извлечь и обработать данные, но теперь я не могу понять, как перестроить гистограмму. У меня есть некоторый массив напряжений, и я сначала построил гистограмму вхождений этих напряжений. Я хочу вместо этого сделать гистограмму событий в час ( так что ось y нормальной гистограммы делится на количество часов, которые я взял данные ), а затем повторно построить гистограмму с манипулируемые y данные.

у меня есть массив, который содержит количество событий в час ( в составе оригинального y оси pyplot.hist деленные на количество часов данные были взяты ), и бункеры из гистограммы. Я составил этот массив, используя следующий код (взятый из ответа, связанного выше ):

import numpy
import matplotlib.pyplot as pyplot
mydata = numpy.random.normal(-15, 1, 500)      # this seems to have to be 'uneven' on either side of 0, otherwise the code looks fine. FYI, my actual data is all positive
pyplot.figure(1)
hist1 = pyplot.hist(mydata, bins=50, alpha=0.5, label='set 1', color='red')
hist1_flux = [hist1[0]/5.0, 0.5*(hist1[1][1:]+hist1[1][:-1])]
pyplot.figure(2)
pyplot.bar(hist1_flux[1], hist1_flux[0])

этот код точно не соответствует тому, что происходит в моем коде; мои данные состоят из 1000 массивов 1000 точек данных каждый ( напряжения). Я сделал гистограммы этого, что дает мне количество вхождений заданного диапазона напряжения (или ширины Бина ). Все, что я хочу сделать, это заново построить гистограмму количества событий в час (so yaxis гистограммы / 5 часов) с той же исходной шириной бункера, но когда я разделяю hist1[0]/5 и replot в вышеуказанном пути, "ширина ящика" все неправильно.

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

заранее спасибо, и мне очень жаль, если я пропустил что-то очевидное.

проблема, проиллюстрированная в выводе моего образца кода и моих исходных данных, выглядит следующим образом:

верхние участки: выход фрагмента кода.
нижние участки: мои фактические данные. Upper plots: code snippet output. Lower plots: My actual data.

1 ответов


потому что bar функция принимает аргумент width, который по умолчанию 0.8 (plt.bar(left, height, width=0.8, bottom=None, hold=None, **kwargs)), поэтому необходимо менять его на расстояние между двумя барами:

pyplot.bar(hist1_flux[1], hist1_flux[0],
           width=hist1_flux[1][1] - hist1_flux[1][0])