Python直方图:手动标准化计数并重新绘制为直方图

时间:2016-01-27 10:53:02

标签: python numpy matplotlib histogram

我尝试搜索类似的东西,我能找到的最接近的东西是this,它帮助我提取和操纵数据,但现在我无法弄清楚如何重新绘制直方图。我有一些电压阵列,我首先绘制了这些电压出现的直方图。我想要制作每小时事件的直方图(所以正常直方图的y轴除以我拍摄数据的小时数),然后用操纵的 y <重新绘制直方图/ strong>数据。

我有一个数组,其中包含每小时的事件数(由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个(电压)。我已经制作了直方图,它给出了给定电压范围(或箱宽)的出现次数。我想做的就是重新绘制每小时事件数量的直方图(所以直方图的 yaxis / 5小时)与原始相同bin宽度,但是当我以上述方式划分 hist1[0]/5 并重新绘制时,'bin width'都是错误的。

我觉得必须有一种更简单的方法,而不是手动重新绘制我自己的直方图。

提前致谢,如果我错过了一些明显的东西,我真的很抱歉。

我的示例代码和原始数据的输出中说明的问题如下:

上图:代码段输出 下图:我的实际数据。 Upper plots: code snippet output. Lower plots: My actual data.

1 个答案:

答案 0 :(得分:3)

这是因为bar函数采用了参数width,默认为0.8plt.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])