You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

plt.hist设置density=True不生效,直方图高度异常求助

直方图归一化问题分析与解决

首先明确:plt.hist()的density=True参数,作用是让直方图所有柱子的面积总和为1(概率密度归一化),而非柱子高度之和为1——这是很多人容易踩的误解点。

如果你要的是「高度代表频率占比」

如果你的预期是每个柱子高度对应该区间数据的占比(高度总和为1),别用density=True,改用weights参数实现:

import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt("../data/data_queue_R" + str(64) + "_" + str(1) + ".txt")
# 生成与数据长度一致的权重,让每个样本的权重为1/总样本数
plt.hist(data, bins=40, weights=np.ones_like(data)/len(data))
plt.show()

验证density=True的正确性

如果确实需要概率密度归一化(面积总和为1),可以手动验证结果是否正确:

counts, bins, patches = plt.hist(data, bins=40, density=True)
# 计算所有柱子的面积之和
total_area = np.sum(counts * np.diff(bins))
print(total_area)  # 输出应接近1,说明归一化生效

额外排查建议

  • 先打印数据的基础统计值(比如print(np.min(data), np.max(data), np.mean(data))),确认数据分布本身是否符合你的预期,排除数据读取或来源的问题。
  • 给直方图加上柱子边框,能更清晰区分区间:
plt.hist(data, bins=40, density=True, edgecolor='black')

内容的提问来源于stack exchange,提问作者a_confused_student

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 07:50:18