Python 为什么';matplotlib直方图的'normed'参数没有任何作用吗?
我被中的Python 为什么';matplotlib直方图的'normed'参数没有任何作用吗?,python,matplotlib,Python,Matplotlib,我被中的normed参数弄糊涂了,为什么它不改变绘图输出: 如果为True,返回元组的第一个元素将是counts 归一化以形成概率密度,即,n/(len(x)'dbin),即。, 直方图的积分总和为1。如果stacked也为真, 直方图之和标准化为1 默认值为False 看起来很清楚。我见过它叫做密度函数,概率密度,等等 也就是说,给定[0,10]中大小为1000的随机均匀分布: 指定normed=True应将y轴更改为密度轴,其中条形总和为1.0: 但实际上,它并没有这样做: r = np
normed
参数弄糊涂了,为什么它不改变绘图输出:
如果为True,返回元组的第一个元素将是counts
归一化以形成概率密度,即,n/(len(x)'dbin)
,即。,
直方图的积分总和为1。如果stacked
也为真,
直方图之和标准化为1
默认值为False
看起来很清楚。我见过它叫做密度函数,概率密度,等等
也就是说,给定[0,10]中大小为1000的随机均匀分布:
指定normed=True
应将y轴更改为密度轴,其中条形总和为1.0:
但实际上,它并没有这样做:
r = np.random.uniform(size=1000)
plt.hist(r, normed=True)
此外:
print(plt.hist(r, normed=True)[0].sum())
# definitely not 1.0
10.012123595
因此,我已经看到@Carsten König对类似问题的回答,我并不要求解决问题。我的问题是,normed
的目的是什么?我是否误解了这个参数的实际作用
matplotlib甚至给出了一个名为“直方图百分比演示”的示例,其中的积分看起来会超过千分之一。条形图的高度不一定等于一。 它是曲线下的面积,与直方图的积分相同,等于1:
import numpy as np
import matplotlib.pyplot as plt
r = np.random.uniform(size=1000)
hist, bins, patches = plt.hist(r, normed=True)
print((hist * np.diff(bins)).sum())
# 1.0
norm=True
因此返回一个直方图,该直方图可以解释为概率分布
normed
:布尔值,可选
不赞成;改用density关键字参数
density=True
seaborn.displat
,默认情况下,它使用密度而不是频率绘制直方图normed=True
所做的是将曲线下的面积缩放为1,如@unutbu所示density=True
保持相同的属性(曲线下的面积总和为1),更具意义和实用性
r = np.random.uniform(size=1000)
hist, bins, patches = plt.hist(r, density=True)
print((hist * np.diff(bins)).sum())
[Out]1我不认为这是不直观的。As还指出:“用于概率密度的直方图的总面积始终归一化为1。如果x轴上的间隔长度都为1,则直方图与相对频率图相同。”因此,您期望的是相对频率图,但使用
norm=True
时,它实际上是概率密度图。这是一个非常典型的例子,其中normed=True
非常有用——将直方图与拟合的概率分布进行比较。对柱状图进行规范化可以使两个柱状图以相同的比例显示