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

Python matplotlib绘制直方图时bins与数组类别不匹配问题求助

问题解决方法

问题根源

你直接给hist方法传入bins = 17时,matplotlib会自动在你的数据取值范围(700~1090)内划分17个等宽区间,每个区间宽度约为22.94,远大于不同权重值的间隔,会导致多个权重值被归入同一个bin,最终统计的计数不符合预期。

解决逻辑

要实现每个权重类别对应单独一个bin,你需要手动指定bin的边界,让每个bin恰好只容纳对应类别的权重值:

  • 先提取所有唯一的权重值并排序
  • 以每个值±0.5作为对应bin的左右边界,保证整数值不会跨区间落入多个bin

修改后可运行代码

from matplotlib import pyplot as plt
import numpy as np
     
# 数据集
weights = np.array([901, 870, 970, 790, 1090, 960, 980, 820, 840, 890, 
                    1010, 920, 700, 880, 910, 890, 790, 810, 990, 750])

# 生成自定义bins:每个唯一权重值对应一个bin
unique_weights = np.sort(np.unique(weights))
bins = np.concatenate([unique_weights - 0.5, [unique_weights[-1] + 0.5]])

# 绘制直方图
fig, ax = plt.subplots(figsize =(10, 7))
ax.hist(weights, bins = bins)
plt.axis([700,1091,0,2])
    
# 显示图表
plt.show()

运行后每个权重类别会对应单独的柱子,重复值对应的柱子高度为2,其余为1,符合预期。如果你是按自定义规则划分17个类别,只需把上述bins替换为你自己定义的17个区间的边界数组即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:54:03