我知道一些类似的问题但是我已经尝试了它们的代码,但它在我的环境中不起作用。所以我有一个大的数据列表(浮点数),我想把它绘制成直方图。虽然我可以很容易地绘制绝对频率,但我想绘制相对频率(纵坐标上的分数/百分比,即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。非常感谢,如果这与过去的问题非常相似,我深表歉意。
答案 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