【发布时间】:2012-04-03 18:22:17
【问题描述】:
我将数据作为浮点数列表,我想将其绘制为直方图。 Hist() 函数可以完美地绘制绝对直方图。但是,我不知道如何以相对频率格式来表示它——我想将它作为一个分数,或者理想情况下作为 y 轴上的一个百分比。
代码如下:
fig = plt.figure()
ax = fig.add_subplot(111)
n, bins, patches = ax.hist(mydata, bins=100, normed=1, cumulative=0)
ax.set_xlabel('Bins', size=20)
ax.set_ylabel('Frequency', size=20)
ax.legend
plt.show()
我认为 normed=1 参数会做到这一点,但它给出的分数太高,有时大于 1。它们似乎也取决于 bin 大小,好像它们没有被 bin 大小或其他东西标准化.然而,当我设置累积 = 1 时,它很好地总结为 1。那么,问题在哪里?顺便说一句,当我将相同的数据输入 Origin 并绘制它时,它给了我完全正确的分数。谢谢!
【问题讨论】:
-
你为什么用引号说 "list",你的数据有什么特别之处吗?你是如何存储它的?您还将数据称为
Data,这很奇怪,因为 Python 命名约定规定CamelCase保留用于类名 - 请参阅 PEP 8 python.org/dev/peps/pep-0008。 -
抱歉误导。我只是不确定说明数据类型和参数等的约定。因此,我编辑了原始帖子以删除所有引号。这只是整个代码的和平,为了简化,我重命名了变量只是为了在这里发布它。在原始代码中,它们的名称对我有意义,但与问题无关,因为其余代码工作得很好。我现在将它的数据重命名为 mydata。
-
不用担心,只是让您知道。为改进问题喝彩,让每个人都做得更好。
-
normed已弃用。您可以改用density。它使积分(不是总和)等于 1。
标签: python matplotlib histogram frequency