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

如何用Matplotlib实现不等区间但等宽柱形的直方图?

用Matplotlib实现不等区间但柱宽相等的直方图

完全可以用Matplotlib实现,核心是放弃plt.hist的自动柱宽计算,改用plt.bar手动绘制,把每个不等宽的数据区间映射为等宽的柱形位置。具体实现如下:

修改后的完整代码

import matplotlib.pyplot as plt
from matplotlib.ticker import AutoMinorLocator
import numpy as np

# 假设loss是你的数据数组
# loss = ... 

fig = plt.figure(figsize=(16,6))

bins = [50,500,1000,10000,50000,100000,200000,500000,1000000]
# 单独统计每个区间的频数
counts, _ = np.histogram(loss, bins=bins)
# 给每个柱分配连续的整数位置,保证宽度一致
x_pos = np.arange(len(counts))
# 绘制等宽柱形,width控制柱间间隙
plt.bar(x_pos, counts, width=0.85)

# 保留你原来的次要刻度和网格设置
minor_locator = AutoMinorLocator(2)
plt.gca().xaxis.set_minor_locator(minor_locator)
plt.grid(which='minor', color='white', lw=0.5)

# 设置x轴刻度标签,对应原区间范围
xticks_labels = [ "{:.0f}\nto\n{:.0f}".format(bins[i], bins[i+1]) for i in range(len(bins)-1)]
plt.xticks(x_pos, labels=xticks_labels)

plt.show()

关键逻辑说明

  • 用np.histogram分离数据统计和可视化步骤,只提取每个区间的频数
  • x_pos将每个数据区间映射为0、1、2...这类连续整数位置,从根源上保证柱形宽度一致
  • width=0.85和你原代码的rwidth参数效果匹配,控制柱形之间的间隙大小
  • 保留了你原本的网格、刻度标签样式,仅调整x轴的位置映射逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:30:54