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

如何使Matplotlib直方图X轴刻度标记间距保持相等?

解决自定义bins下直方图X轴刻度均匀的问题

问题核心在于对数刻度的特性:它是基于数值的对数转换分配轴上位置的,1e+6(对数为6)和1e+22(对数为22)的对数差远大于其他区间,轴上间距自然会被拉大。要让刻度标记间距相等,需把每个自定义bin当作离散类别,用条形图替代直方图实现:

具体实现代码

import matplotlib.pyplot as plt
import numpy as np

# 模拟测试数据(替换为你的实际float_l数据)
float_l = np.random.choice([1.2, 3, 6, 15, 25, 60, 250, 1500, 8000, 2e5, 5e6, 1e22], size=1000)
x_values = [1.0, 2.0, 5.0, 10.0, 20.0, 50.0, 2e+2, 1.2e+3, 7e+3, 1e+5, 1e+6, 1e+22]

plt.figure(figsize=(25,6))

# 计算每个自定义bin的计数,和原hist逻辑一致
counts, _ = np.histogram(float_l, bins=x_values)
# 用条形图绘制,X轴用连续索引保证间距均匀
plt.bar(range(len(counts)), counts, width=0.8)

# 设置X轴刻度为原bin边界值,优化标签格式提升可读性
plt.xticks(
    range(len(counts)),
    [f"{x:.0e}" if x >= 100 else str(x) for x in x_values[:-1]],
    rotation=45
)

plt.title('Float Histogram')
plt.xlabel('Float')
plt.ylabel('Count')

plt.show()

关键说明

  1. 先用np.histogram计算每个bin的计数,和原plt.hist的计数逻辑完全一致。
  2. 用plt.bar绘制条形图,X轴采用连续索引值,确保每个条形宽度一致、刻度间距完全相等。
  3. 将X轴标签替换为原bin的边界值,通过格式化处理让大数值以科学计数法显示,兼顾可读性和美观度。

如果想保留对数刻度的数值感知,同时让bin视觉宽度一致,需要手动计算每个bin在对数轴上的宽度比例并调整直方图参数,但操作复杂,不如条形图的方案直观高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:15:06