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

如何用Python的matplotlib.hist()绘制自定义区间的概率直方图?

解决matplotlib直方图绘制问题

我来帮你搞定这个直方图的问题!你现在遇到的问题主要是几个细节没处理到位,我一步步给你拆解修正:

核心问题梳理

  • 你的list_age里都是字符串类型的年龄,matplotlib没法直接用字符串计算区间频数
  • 没有指定你想要的自定义X轴区间(bins),默认的区间划分不符合你的需求
  • 默认直方图绘制的是频数,不是你要的概率

修正后的完整代码

import matplotlib.pyplot as plt

# 补全你的年龄列表(假设省略部分都是合法的年龄字符串)
list_age = ['26','28','26','36','38','31','22','31','25','30','37','27','27','29','27','21','27','38','31','41','28','31','28','33','26','39','37','24','31','34','39','33','22', '30','24','29']

# 1. 把字符串年龄转成整数,让matplotlib能正确处理
age_numbers = [int(age) for age in list_age]

# 2. 定义你想要的X轴区间
custom_bins = [0, 20, 25, 30, 35, 40, 45, 50, 55]

# 3. 绘制概率直方图:用weights参数让Y轴显示每个区间的概率占比
weights = [1/len(age_numbers)] * len(age_numbers)
plt.hist(age_numbers, bins=custom_bins, weights=weights, edgecolor='black')

# 设置图表标签和标题
plt.xlabel('年龄')
plt.ylabel('概率')
plt.title('年龄分布概率直方图')

# 把X轴刻度设置为你指定的区间值
plt.xticks(custom_bins)

plt.show()

关键步骤解释

  1. 数据类型转换:把字符串转成整数是基础操作,不然matplotlib无法统计每个区间内的年龄数量
  2. 自定义区间:custom_bins直接传入你要求的区间列表,hist函数会严格按照这个划分来分组数据
  3. 概率设置:通过weights给每个数据点赋予1/总数据量的权重,这样每个区间的柱子高度就是该区间的概率占比(所有区间的概率和为1)。如果你想显示概率密度(区间高度×区间宽度=概率),可以把weights参数换成density=True,根据你的实际需求选择即可

另外,要是某个区间(比如0-20岁)没有数据,对应的柱子高度会是0,这是正常现象,因为你的数据里没有这个区间的年龄。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:08:01