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

Python matplotlib.pyplot.hist返回一个直方图,其中当我有不同的数据时,所有箱子都具有相同的值,python,matplotlib,histogram,Python,Matplotlib,Histogram,我正在尝试使用matplotlib.pyplot.hist在python中创建直方图。 我有一个不同的数据数组,但是当我将代码放入python中时,直方图返回时,所有容器中的值彼此相等,或者等于零,这是不正确的 柱状图应在其上方的线形图上显示,且箱子的高度和形状与上图大致相同 柱状图上方的折线图是用来说明我的数据是什么样子的,并表明我的数据确实有所不同 我的数据数组称为spectrumnoise,它只是我针对数组x创建的一个函数 x=np.arange[0.1,20.1,0.1] 我用来创建柱

我正在尝试使用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)
我还无数次地改变了箱子的数量,看看这是否有助于直方图函数的正常化,但没有任何效果

代码输出的图像可以在这里看到
问题在于
频谱噪声
是数组的
列表
,而不是
numpy.ndarray
。当您将数组列表作为第一个参数,它会将每个元素作为单独的数据集进行打印。所有箱子的高度都相同,因为列表中的每个“数据集”中只有一个值

hist
docstring:

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

尝试将
spectrumnoise
转换为1D阵列:

pp.hist(np.vstack(spectrumnoise),50)
另一方面,看看你的代码,绝对没有理由首先将数据转换成列表。您应该直接对阵列中的片进行操作,例如:

data[20:40] += y1

问题在于
spectrumnoise
是数组的
列表,而不是
numpy.ndarray
。当您将数组列表作为第一个参数,它会将每个元素作为单独的数据集进行打印。所有箱子的高度都相同,因为列表中的每个“数据集”中只有一个值

hist
docstring:

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

尝试将
spectrumnoise
转换为1D阵列:

pp.hist(np.vstack(spectrumnoise),50)
另一方面,看看你的代码,绝对没有理由首先将数据转换成列表。您应该直接对阵列中的片进行操作,例如:

data[20:40] += y1

图表确实不同(即并非全部在一个箱子中,箱子中的值不同),它应该是什么样子直方图应该像上面的折线图,折线图中的数据与用于直方图的数据相同,然而,我的直方图功能不起作用,因此直方图条应该大致与上面的折线图一样高。你的问题是“然而,我得到的唯一输出是下面的图片,即使我的数据明显不同。”输出中的数据确实不同。是的,我知道,但我需要生成数据的直方图,我不想要线图。你确定hist是正确的函数吗?似乎
spectrumnoise
中的数据已经被装箱,而不是原始样本。如果是这种情况,你可以只画一个条形图(例如,
mpl.bar(x,spectrumnoise,width=0.25)
)图形是不同的(即不是全部在一个箱子里,箱子里有不同的值),它应该是什么样子直方图应该像上面的线形图,线形图中的数据与用于直方图的数据相同,然而,我的直方图功能不起作用,因此直方图条应该大致与上面的折线图一样高。你的问题是“然而,我得到的唯一输出是下面的图片,即使我的数据明显不同。”输出中的数据确实不同。是的,我知道,但我需要生成数据的直方图,我不想要线图。你确定hist是正确的函数吗?似乎
spectrumnoise
中的数据已经被装箱,而不是原始样本。如果是这样的话,你可以画一个条形图(例如,
mpl.bar(x,spectrumnoise,width=0.25)
),非常感谢!我不知道为什么它不起作用,我很高兴它这么简单。我将所有数据转换成列表,因为我不知道如何将数组添加到一起,所以非常感谢您帮助我简化代码!我很高兴这有帮助。作为将来的参考,如果您确实需要将数组连接在一起,您可以使用
np.concatenate
(虽然连接数组比较慢,通常最好避免)。非常感谢!我不知道为什么它不起作用,我很高兴它这么简单。我将所有数据转换成列表,因为我不知道如何将数组添加到一起,所以非常感谢您帮助我简化代码!我很高兴这有帮助。作为将来的参考,如果您确实需要将数组连接在一起,可以使用
np.concatenate
(虽然连接数组比较慢,通常最好避免)。