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

最佳答案

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

注意

编写此代码的更好方法:

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


会是这样

np.ones_like(data) / data.size

关于python - 在matplotlib直方图上绘制相对频率与绝对值的关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16990004/

10-11 22:17
查看更多