matplotlib.pyplot.hist返回一个直方图,当我有不同的数据时,所有的bin都具有相同的值

时间:2013-08-21 10:50:18

标签: python matplotlib histogram

我正在尝试使用matplotlib.pyplot.hist在python中创建直方图。 我有一个数据变化的数组,但是当我的代码放入python时,直方图返回时所有箱中的值彼此相等,或等于零,这是不正确的。

直方图应该看上面的折线图,其中的箱子大小与上图大致相同,形状相同。

直方图上方的折线图用于说明我的数据是什么样的,并显示我的数据确实有所不同。

我的数据数组叫做spectrumnoise,它只是我针对数组x创建的函数

x=np.arange[0.1,20.1,0.1]

我用来创建直方图的代码和上面的折线图是

import matplotlib.pylot as mpl 
mpl.plot(x,spectrumnoise)
mpl.hist(spectrumnoise,bins=50,histtype='step')
mpl.show()

我也尝试过使用

mpl.hist((x,spectrumnoise),bins=50,histtype=step)

我还无数次更改了二进制数,看看是否有助于规范化直方图功能,但没有任何效果。

此处可以看到代码输出的图像 enter image description here

1 个答案:

答案 0 :(得分:0)

问题是spectrumnoiselist数组,而不是numpy.ndarray。当您将hist数组列表作为其第一个参数时,它会将每个元素视为要绘制的单独的数据集。所有的箱子都有相同的高度,因为列表中的每个“数据集”只有一个值!

来自hist docstring:

  

可以通过 x 作为数据集列表提供多个数据   长度可能不同([ x0 x1 ,...]),或者   一个二维的ndarray,其中每列是一个数据集。

尝试将spectrumnoise转换为1D数组:

pp.hist(np.vstack(spectrumnoise),50)

顺便说一下,查看代码时,绝对没有理由首先将数据转换为列表。您应该做的是直接在阵列中的切片上操作,例如:

data[20:40] += y1