从数组绘制直方图 matplotlib
我有两个数组:
比如说:
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
的直方图,默认有十个区间,如下所示。
不过这里有点奇怪,因为 a
有 101 个值(这意味着绘制的范围是从 2400 到 2500,包括这两个值),所以最后一个区间包含了 11 个值的频率,而其他区间则只有 10 个值的频率。你可以用下面的代码给每个值分配一个自己的区间。
plt.hist(range(2400, 2501), weights=a[0][0], bins=101)
plt.show()
这样生成的图像如下。