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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:06:20