为了账号安全,请及时绑定邮箱和手机立即绑定

matplotlib.pyplot.hist 错误的规范属性

matplotlib.pyplot.hist 错误的规范属性

PIPIONE 2021-07-29 14:39:48
我正在创建在数据框中组织并按天分组的数据直方图。有时可能会发生数据完全相同的情况。因此,当我使用该normed = True属性绘制直方图时,我希望有一个以零为中心且高度等于 1 的 bin。但是,我看到高度等于 bin 的数量。我怎样才能解决这个问题?我想用直方图表示一个概率密度函数,所以最大值应该是1。代码示例和输出:plt.rcParams['figure.figsize'] = 10, 4data = np.zeros((1000))l = plt.hist(data,normed = True, bins = 100)编辑:我现在看到该属性normed已被弃用。但是,如果我尝试使用该属性,则会density出现错误AttributeError: Unknown property density
查看完整描述

2 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您看到的图是正确的,因为曲线下的面积(直方图/条形图)应该是 1。这在您的图中确实如此。为了强调这一点,我在 at 创建了一条垂直线,x=0.01您会注意到条的宽度确实是 0.01。由于条形的高度为 100,因此面积为 100 * 0.01 = 1。


plt.rcParams['figure.figsize'] = 10, 4

data = np.zeros((1000))

l = plt.hist(data,normed = True, bins = 100)

plt.axvline(0.01, lw=1)

plt.ylim(0, 150)

如果您使用density=Trueas,也会发生同样的情况


l = plt.hist(data,density = True, bins = 100)

//img1.sycdn.imooc.com//610907520001490706320265.jpg

使用jdehesa的建议,按照你的方式工作

l = plt.hist(data,density = True, bins=np.arange(-10, 11))

//img1.sycdn.imooc.com//6109075d0001e6ac06440261.jpg

根据答案使用DavidG的建议为您提供 1 的高度,但该区域未标准化为 1。

weights = np.ones_like(data)/float(len(data))
l = plt.hist(data,weights=weights)

//img1.sycdn.imooc.com//6109076a0001407b05660229.jpg

最后,如果您需要高度为 1 和宽度为 1(因此面积 = 1)以及归一化面积,您可以使用单个 bin 作为

l = plt.hist(data, density=True, bins=1)
plt.xlim(-10, 10)

//img1.sycdn.imooc.com//610907770001ed9105810240.jpg

查看完整回答
反对 回复 2021-08-03
  • 2 回答
  • 0 关注
  • 416 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信