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

Python:使用matplotlib绘制自定义区间的直方图

手动设置Matplotlib直方图区间解决方案

直接通过自定义bins数组来实现你的需求,以下是可运行的代码示例及关键说明:

import matplotlib.pyplot as plt
import numpy as np

# 模拟测试数据(替换成你的真实数据即可)
np.random.seed(42)
data = np.concatenate([
    np.zeros(20),               # 包含20个0值
    np.random.uniform(1, 60, 100),  # 0到60之间的随机数
    np.random.uniform(61, 100, 30)  # 大于60的随机数
])

# 构造符合要求的区间数组
# - [-0.001, 0.001]:精准捕获所有0值(可根据数据精度调整范围)
# - range(5, 61, 5):生成5、10...60,对应0<x≤5、5<x≤10...55<x≤60的区间
# - float('inf'):包含所有大于60的值
bins = [-0.001, 0.001] + list(range(5, 61, 5)) + [float('inf')]

# 绘制直方图,设置柱子边界便于区分
plt.hist(data, bins=bins, edgecolor='black')

# 自定义坐标轴标签,让区间显示更直观
labels = ['0'] + [f'{i}-{i+5}' for i in range(5, 60, 5)] + ['>60']
# 计算每个区间的中点作为标签位置,旋转45度避免重叠
plt.xticks([(bins[i] + bins[i+1])/2 for i in range(len(bins)-1)], labels, rotation=45)

# 添加基础标注
plt.title('自定义区间直方图')
plt.xlabel('数值区间')
plt.ylabel('频数')

# 自动调整布局,防止标签被截断
plt.tight_layout()
plt.show()

关键说明:

  • 0值单独区间:用极小的范围[-0.001, 0.001]包裹0,确保只有0值会落入该区间,避免浮点精度问题;
  • 0-60区间分组:通过range(5,61,5)生成步长为5的区间节点,刚好覆盖0<x≤60的所有数值;
  • 大于60的区间:用float('inf')作为区间上限,自动收纳所有超过60的值;
  • 自定义标签:替换默认的区间数值标签为更易懂的文本,提升图表可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:55:15