在matplotlib直方图上绘制相对频率与绝对值

时间:2013-06-07 17:42:27

标签: python matplotlib histogram frequency

我知道一些类似的问题但是我已经尝试了它们的代码,但它在我的环境中不起作用。所以我有一个大的数据列表(浮点数),我想把它绘制成直方图。虽然我可以很容易地绘制绝对频率,但我想绘制相对频率(纵坐标上的分数/百分比,即y轴)。我的代码是:

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
#1 - n, bins, patches = ax.hist(zdata, bins=ceil(min-max), normed=1, cumulative=0)
#2 - n, bins, patches = ax.hist(zdata, weights=np.zeros_like(data) + 1. / data.size)
ax.set_xlabel('Atomic z coordinate', size=ceil(min-max))
ax.set_ylabel('Relative Frequency')
ax.legend
plt.show()

我注意到python要求bin计数为整数,但我知道我使用70这样很容易修复。我更紧迫的问题是,当我尝试在这个片段中注释掉的两个命令时,都不起作用。情况1不会引发错误,但是当我完成命令并调用show()时,图形不会出现。案例2引发了一个NameError并抱怨它不知道“数据”是什么。我在其他问题中遵循了模板,我不确定自己的“数据”是什么;我的数组(列表)是zdata。另外,垃圾箱和补丁之间有区别吗?

我使用的是python 2.7.3,IDE是Spyder 2.1.11。非常感谢,如果这与过去的问题非常相似,我深表歉意。

1 个答案:

答案 0 :(得分:1)

命令np.zeros_like(data)表示您将使用与数组data相同长度和数据类型的零填充数组。如果要使用此命令,则需要定义一个名为data的数组(NameError表示您正在尝试使用尚未定义的变量名称。),或者您可能需要要将data替换为zdata,因为zdata存在,我猜你希望权重与输入数据的长度相同。

注意

更好的方式来写这个:

np.zeros_like(data) + 1. / data.size

就是这个

np.ones_like(data) / data.size