python - matplotlib.pyplot.hist 错误的规范属性
问题描述
我正在创建在数据框中组织并按天分组的数据直方图。在某些日子里,数据可能完全为空。因此,当我使用该属性绘制直方图时normed = True
,我希望有一个以零为中心且高度等于 1 的 bin。但是,我看到高度等于 bin 的数量。我怎样才能解决这个问题?我想用直方图表示一个概率密度函数,所以最大值应该是1。
代码示例和输出:
plt.rcParams['figure.figsize'] = 10, 4
data = np.zeros((1000))
l = plt.hist(data,normed = True, bins = 100)
编辑:我现在看到该属性normed
已被弃用。但是,如果我尝试使用属性density
,我会收到错误AttributeError: Unknown property density
解决方案
您看到的图是正确的,因为曲线下的面积(直方图/条形图)应该是 1。在您的图中确实是这种情况。为了突出这一点,我在 处创建了一条垂直线,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=True
as
l = plt.hist(data,density = True, bins = 100)
使用jdehesa的建议,您可以按照自己的方式进行操作
l = plt.hist(data,density = True, bins=np.arange(-10, 11))
根据此答案使用DavidG的建议,您的高度为 1,但该区域未标准化为 1。
weights = np.ones_like(data)/float(len(data))
l = plt.hist(data,weights=weights)
最后,如果您需要 1 的高度和 1 的宽度(因此面积 = 1)以及标准化面积,您可以使用单个 bin 作为
l = plt.hist(data, density=True, bins=1)
plt.xlim(-10, 10)
推荐阅读
- recursion - MIPS Hermite 堆栈示例使用
- c# - 在 ubuntu 上通过 .net 核心发送电子邮件返回 base64 错误
- node.js - 我在提供或部署 Firebase 托管功能时遇到问题
- react-native - 为什么我的 onEnter 道具没有被触发?(react-native-router-flux v4)
- android - 调用lifecycle.addObserver 后出现内存泄漏
- r - 在数据框中的组内按时间向后编号代数(gen:0、-1、-2 等)
- javascript - Azure Maps 上是否有任何绘图功能?
- c# - 如何在 LINQ 中将行转换为列
- elasticsearch - ElasticSearch 有什么好的布尔查询解析器吗?
- c++ - 通过索引运算符插入 boost::program_options::variables_map