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
相关产品推荐
相关产品推荐

