Matplotlib绘制直方图时如何对齐xticks与x轴标签?
问题原因
调用plt.hist()时传入bins=2会让matplotlib根据输入数据集自动计算分箱边界,自动生成的两个柱形的中心位置,和你手动通过ax.set_xticks(np.arange(2))设置的0、1刻度位置不匹配,最终导致轴标签和柱形错位。
修复方案
核心是两步:
- 手动指定明确的分箱边界,避免自动分箱带来的位置偏移
- 计算每个柱形的中心位置,将x轴刻度设置在柱形正中心
如果你的months数据集是用1-12代表1-12月的数值,两个分组「年初」「年末」对应1-6月、7-12月,直接替换成如下代码即可:
import matplotlib.pyplot as plt import numpy as np import pandas as pd fig, ax = plt.subplots() fig.set_figheight(6) fig.set_figwidth(10) # 手动指定分箱边界:0.5-6.5覆盖1-6月,6.5-12.5覆盖7-12月 n, bins, patches = plt.hist(months, bins=[0.5, 6.5, 12.5], edgecolor='k') # 计算每个柱形的中心点作为刻度位置 tick_pos = [(bins[i] + bins[i+1]) / 2 for i in range(len(bins)-1)] ax.set_xticks(tick_pos, ['start of the year', 'end of the year']) plt.title('birthdates of the players') plt.xlabel('birthdate') plt.ylabel('frequency') plt.show()
如果你的months不是1-12的编码格式,只需要把bins参数替换为你数据集对应二分的边界值即可,不需要保留原代码里的align='left'参数,这个参数在自动分箱场景下反而会加大偏移量。
内容的提问来源于stack exchange,提问作者sanyer
相关产品推荐
相关产品推荐

