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

Python 2.7中概率直方图与最佳拟合线无法绘制问题

解决概率直方图与正态拟合线绘制异常问题

我帮你排查了代码里的几个关键问题,这些都是导致图表无法正常显示的常见原因,下面是修正后的完整代码,以及对应的问题解析:

修正后的完整代码

import matplotlib.pyplot as plt
from scipy.stats import norm

# 假设prob_long是你的一维概率列表/数组
# 创建归一化概率直方图
n, bins, patches = plt.hist(
    prob_long,  # 移除外层的[],直接传入一维数据
    bins=[0.36,0.365,0.37,0.375,0.38,0.385,0.39,0.395,0.40,0.405,0.41,0.415,0.42,0.425,0.43,0.435,0.44,0.445,0.45,0.455,0.46,0.465,0.47,0.475,0.48,0.485,0.49,0.495,0.5],
    density=True,  # 替换已弃用的normed=True
    facecolor='orange', alpha=0.75, ec='black'
)

# 计算正态分布拟合参数并绘制拟合线
mu, sigma = norm.fit(prob_long)
# 使用scipy的norm.pdf替代过时的mlab.normpdf
y = norm.pdf(bins, mu, sigma)
plt.plot(bins, y, 'r--', linewidth=2, label=f'Normal Fit ($\mu={mu:.3f}$, $\sigma={sigma:.3f}$)')

# 优化图表可读性
plt.xlabel('Probability Value')
plt.ylabel('Density')
plt.title('Distribution of Long Probabilities')
plt.grid(axis='y', alpha=0.3)
plt.legend()

plt.show()

关键问题解析

  • 数据维度错误
    你原来用[prob_long]把一维数据包装成了二维数组,plt.hist处理二维数据时会按子数组拆分绘制,导致直方图计算异常。直接传入prob_long(确保它是一维的数值集合)就能正确统计每个bin的频率。

  • 过时参数导致的兼容性问题

    • normed=True在matplotlib 3.0+版本已被弃用,改用density=True来实现归一化(使直方图总面积为1),避免警告或绘制失败。
    • mlab.normpdf属于过时模块,现在官方推荐使用scipy.stats.norm.pdf来计算正态分布概率密度,兼容性更强。
  • 拟合线代码不完整
    你原来的y=mlab.normpdf(bins, ...缺少了拟合得到的均值mu和标准差sigma参数,补全后才能生成对应的拟合曲线。

额外排查点

如果修正后图表还是没有显示,建议检查:

  • prob_long是否为空列表,或者所有数据是否都不在你指定的bins范围内(如果数据全部超出bins区间,直方图会没有柱子)。
  • 确保已经正确安装并导入了matplotlib和scipy库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:28:19