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

Matplotlib直方图x轴刻度未与柱子居中对齐问题求助

解决Matplotlib直方图x轴刻度与柱子居中对齐的问题

嘿,我看到你遇到了Matplotlib直方图的刻度对齐困扰——明明设置了align='mid',但x轴刻度还是没法和所有柱子居中对齐。这其实是两个小参数设置冲突导致的,咱们一步步来搞定它:

问题根源

  • 你在ax.hist()里用了bins=25自动生成柱子区间,但之后又手动指定了完全不同的bins数组作为x轴刻度,这两个区间的范围、间隔完全不匹配,align='mid'自然没法发挥作用
  • rwidth=1.10让柱子宽度超过了bin的区间宽度,柱子会溢出到相邻的bin范围,进一步打乱了刻度和柱子的对应关系

修复方案

咱们把自定义的bins数组直接传给hist()函数,让柱子严格基于这个区间生成,同时把rwidth调整到合理范围(比如0.9,既留空隙又不会溢出),这样align='mid'就能正确让刻度对准柱子中心了。

修正后的完整代码

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

# 你的数据数组
data = np.array([1.4, 1.4, 1.4, 1.5, 1.5, 1.6, 1.7, 1.7, 1.7, 1.9, 1.9, 1.9, 1.9, 
                 2.0, 2.0, 2.0, 2.1, 2.1, 2.1, 2.1, 2.2, 2.2, 2.3, 2.3, 2.3, 2.4, 
                 2.5, 2.6, 2.7, 2.7, 2.8, 2.8, 2.8, 2.9, 2.9, 3.1, 3.1, 3.2, 3.2, 
                 3.5, 3.6, 3.8])

fig, ax = plt.subplots(nrows=1, ncols=1)
# 将自定义bins传入hist函数,同时调整rwidth到合理范围
bins = [1.4,1.5,1.6,1.7,1.9,2.0,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3.1,3.2,3.5,3.6,3.8]
ax.hist(data, facecolor='blue', edgecolor='gray', bins=bins, rwidth=0.9, align='mid')

ax.set_xticks(bins)
ax.set_ylabel('Frequency')
ax.set_xlabel('DRA Sizes(mm)')
ax.set_title('Frequencies of DRA Sizes in Males (mm)')
plt.show()

额外说明

  • 现在柱子是严格按照你定义的bins区间生成的,align='mid'会让每个柱子的中心精准对应到bins数组里的刻度值
  • 调整rwidth到0.9是为了让柱子之间保留一点空隙,如果你想要柱子完全挨在一起,可以设为1.0,但千万别超过1,否则会出现柱子重叠或溢出的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:48:33