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

matplotlib绘制极小区间数据时调高bin数得到空直方图如何解决

问题原因

你的数据基准值为1,整体浮动范围仅为±5e-7,相对偏移只有百万分之一量级。当你提升bin数量时,单个bin的宽度会降低到1e-9甚至更低,要么是matplotlib自动计算bin边界时被双精度浮点数的精度误差干扰,要么是渲染时直方图的条形宽度趋近于0,最终呈现为空白图。对数刻度对该问题无效,因为你的数据是线性均匀分布的,不存在量级差异,对数缩放反而会放大精度问题。

解决方法

1. 数据偏移预处理

直接将所有原始数据减去基准值1,把数据转换为相对于1的偏移量,将分布区间平移到0附近,避免大基准值吃掉小范围浮动的精度:

import numpy as np
import matplotlib.pyplot as plt

# data为你的原始数据列表/数组
offset_data = np.array(data) - 1

fig, ax = plt.subplots()
# 可自由设置bin数量,1000也可正常显示
n, bins, patches = ax.hist(offset_data, bins=1000)
# x轴设置为科学计数法显示,方便读数
ax.ticklabel_format(axis='x', style='sci', scilimits=(0,0))
ax.set_xlabel('相对于1的偏移量')
ax.set_ylabel('频数')
plt.show()

2. 自定义bin边界(可选)

如果需要更精准的bin划分,可手动计算偏移后数据的范围,自定义bin边界,避免自动计算的误差:

min_offset = offset_data.min()
max_offset = offset_data.max()
# 1000个bin需要1001个边界点
custom_bins = np.linspace(min_offset, max_offset, 1001)
n, bins, patches = ax.hist(offset_data, bins=custom_bins)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:39:04