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

Python使用pyplot绘制直方图的正确方法及两种实现差异问题

两种Matplotlib直方图绘制结果不一致的原因及正确方案

不一致的核心原因

你写的第二种方法逻辑存在两处关键错误,自然和方法1结果不一致:

  • 第一步调用np.histogram(SP[0])时没有指定分箱数,默认只会生成10个分箱的统计结果,和方法1指定的30个分箱统计维度从根源上就不一样
  • 第二步调用plt.hist()时参数逻辑完全错误:plt.hist()的第一个参数应该是原始样本数据,你传入了第一步生成的10个分箱左边界bins[:-1],又强行指定分箱数为30,再搭配10个权重值,相当于把10个统计结果硬塞到30个分箱里,得到的图形完全不反映原始数据的真实分布

两种正确的直方图绘制方案

方案1:直接用plt.hist()一步绘制(最常用)

就是你写的方法1,直接传入原始数据和分箱参数即可,是最简便的写法:

n, bins, patches = plt.hist(SP[0], 30, facecolor='green', alpha=1, histtype='stepfilled')

方案2:先统计分箱再绘制(适合需要提前获取分箱统计值的场景)

如果需要先调用np.histogram完成统计再绘图,要保证分箱数统一,且绘图参数传递正确:

# 第一步统计时就指定和方法1一致的30个分箱
counts, bins = np.histogram(SP[0], bins=30)
# 优先用plt.stairs绘制预统计的直方图,逻辑更清晰
plt.stairs(counts, bins, fill=True, facecolor='green', alpha=1)

# 如果一定要用plt.hist实现,正确写法如下:
# plt.hist(bins[:-1], bins=bins, weights=counts, facecolor='green', alpha=1, histtype='stepfilled')

对齐结果的注意事项

  • 要保证两种方法结果完全一致,必须显式指定相同的bins参数值,np.histogram和plt.hist的默认分箱规则完全一致,只要参数统一就不会出现偏差
  • 不要把统计得到的分箱边界当做原始数据传入plt.hist,避免逻辑混淆

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:06:03