基于数组的Matplotlib直方图

3

我有两个数组:

例如:

a=[1, 2, 3, 4]

b=[10, 20, 30, 40]

我需要绘制直方图,我知道使用像(1,10),(2,20)这样的坐标很容易绘制曲线。但是如何从数组中绘制直方图呢?目前我卡在了绘制直方图的选项上。有什么建议吗?

import matplotlib.pyplot as plt
import numpy as np

a = [([97, 99, 99, 96, 97, 98, 99, 97, 99, 99, 96, 97, 99, 99, 95,
       98, 99, 97, 97, 98, 97, 96, 98, 98, 98, 98, 98, 98, 96, 98, 98, 98, 98,
       98, 98, 96, 97, 97, 97, 97, 97, 96, 96, 97, 97, 96, 95, 97, 96, 97, 96, 97,
       96, 95, 96, 97, 95, 95, 93, 93, 92, 93, 93, 95, 95, 94, 93, 94, 94, 95, 95, 95,
       95, 96, 96, 95, 96, 96, 96, 96, 94, 95, 90, 95, 95, 95, 95,
       95, 88, 94, 94, 93, 95, 95, 94, 95, 95, 95, 95, 95, 93],)]

for item in a[0]:
    s = item

lengths = len(s)
s2 = [s[x:x+9] for x in xrange(0, len(s), 9)]
print s2.index(min(s2))

test = 2400+int(lengths)
xaxis=range(2400,test)
yaxis=s

以下是图像示例,其中x轴的值为2400-2500,y轴的值来自某种数组。 enter image description here
1个回答

4
你可以使用matplotlib.pyplot.hist在Matplotlib中制作直方图。给定问题中的代码,其中你希望a中的值成为2400到2500之间值的频率,这可能只需要简单地执行以下操作:
plt.hist(range(2400, 2501), weights=a[0][0])
plt.show()

执行此操作会从默认十个箱中生成带有a的直方图,如下所示。

具有十个箱子的直方图。

然而,这里有一点奇怪,因为a有101个值(表示绘制的范围为2400到2500,包括两端),所以最后一个箱子会得到11个值的频率计数,而其他箱子则得到10个值的频率计数。您可以使用以下方法为每个值分配其自己的箱子。

plt.hist(range(2400, 2501), weights=a[0][0], bins=101)
plt.show()

这将生成下面的图像。

101个条形图的直方图。


1
它显示了,但并不是我需要的。我需要x轴是从2400到2500的值,y轴(直方图高度)是来自数组a的值。 - Thomas
添加了图片,展示它应该是什么样子。 - Thomas

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