从数组绘制直方图 matplotlib

3 投票
1 回答
19575 浏览
提问于 2025-04-17 08:36

我有两个数组:

比如说:

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轴的值来自某个数组。

在这里输入图片描述

1 个回答

4

你可以使用 matplotlib.pyplot.hist 在 matplotlib 中制作直方图。根据问题中的代码,如果你想让 a 中的值表示从 2400 到 2500 之间的频率,这样做就很简单:

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

这样做会生成一个基于 a 的直方图,默认有十个区间,如下所示。

Histogram with ten bins.

不过这里有点奇怪,因为 a 有 101 个值(这意味着绘制的范围是从 2400 到 2500,包括这两个值),所以最后一个区间包含了 11 个值的频率,而其他区间则只有 10 个值的频率。你可以用下面的代码给每个值分配一个自己的区间。

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

这样生成的图像如下。

Histogram with 101 bins.

撰写回答