Python直方图:手动将计数标准化并作为柱状图重新填充

2024-04-25 01:47:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着搜索类似的东西,我能找到的最接近的东西是this,它帮助我提取和操作数据,但现在我不知道如何重新绘制直方图。我有一些电压的数组,我首先绘制了这些电压出现的柱状图。我想做一个每小时事件的柱状图(因此普通柱状图的y轴除以我获取数据的小时数),然后用操纵的y数据重新绘制柱状图。在

我有一个数组,它包含每小时的事件数(由来自pyplot.hist的原始y轴除以所获取数据的小时数)和柱状图中的bin。我使用以下代码(取自上面链接的答案)组成了该数组:

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宽度重新绘制每小时事件数的柱状图(因此柱状图/5小时的yaxis,但当我除以hist1[0]/5并以上述方式回复时,“bin width”就错了。在

我觉得一定有一个更简单的方法来做这件事,而不是手动复制我自己的直方图。在

提前谢谢,如果我错过了一些显而易见的东西,我真的很抱歉。在

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

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


Tags: 数据代码bin绘制事件数组直方图this
1条回答
网友
1楼 · 发布于 2024-04-25 01:47:09

这是因为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])

相关问题 更多 >