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

6

我尝试搜索类似的东西,找到最接近的是这个,它帮助我提取和操作数据,但现在我无法弄清如何重新绘制直方图。我有一些电压数组,并且已经绘制了这些电压的出现次数直方图。我想改为制作每小时事件的直方图(所以常规直方图的y轴除以我收集数据的小时数),然后重新绘制直方图,使用操作后的y数据。

我有一个包含每小时事件数的数组(由pyplot.hist的原始y轴除以记录数据所花费的小时数组成),以及直方图的箱子。 我使用以下代码创建了该数组(取自上面链接的答案):

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个数据点(电压)的数组组成。我已经制作了该数据的直方图,这给出了给定电压范围(或bin宽度)的发生次数。我想做的就是重新绘制一个每小时事件数量的直方图(因此为直方图的y轴 / 5小时),使用相同的原始bin宽度,但当我除以hist1[0]/5并以上述方式重新绘制时,“bin宽度”就全部错误了。

我感觉一定有一种更简单的方法来做到这一点,而不是手动重新绘制自己的直方图。

提前致谢,如果我忽略了一些显而易见的东西,真的很抱歉。

问题如下图所示:

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

1个回答

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])

太棒了,这完美地解决了问题,我知道我漏掉了什么,但不知道是什么。非常感谢。我很惊讶pyplot.hist中没有更简单的手动操作所有y值的方法;这似乎是一个自然的添加。 - la femme cosmique

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接