You need to enable JavaScript to run this app. 如何让Matplotlib柱状图的xticks(x轴刻度)居中显示
优惠活动
大模型
产品
解决方案
定价
更多

如何让Matplotlib柱状图的xticks(x轴刻度)居中显示

问题根因

你使用的原始代码是为双组并列柱状图设计的,默认对柱子位置做了左偏移处理,单组柱状图不需要这个偏移,因此会出现x轴刻度和柱子错位的情况。

解决方案

方案1:单组柱状图适配(最常用)

直接去掉bar方法中x参数的偏移量即可,修改对应代码行:
原代码:pps = ax.bar(x - width/2, population, width, label='population')
修改后:pps = ax.bar(x, population, width, label='population')
修改后柱子中心会和x轴刻度完全对齐。

方案2:保留多组柱状图扩展能力

如果后续需要加第二组并列柱子,不想修改柱子偏移逻辑,可以调整x轴刻度的位置匹配当前偏移:
原代码:ax.set_xticks(x)
修改后:ax.set_xticks(x - width/2)


修改后完整可运行代码

from matplotlib import pyplot as plt
import numpy as np

years = [1901, 1911, 1921, 1931, 1941, 1951, 1961, 1971, 1981, 1991, 2001, 2011]
population = [237.4, 238.4, 252.09, 251.31, 278.98, 318.66, 361.09, 439.23, 548.16, 683.33, 846.42, 1028.74]

x = np.arange(len(years)) # 标签位置
width = 0.35 # 柱子宽度

fig, ax = plt.subplots()

ax.set_ylabel('人口数量(单位:百万)')
ax.set_title('年份人口统计')
ax.set_xticks(x)
ax.set_xticklabels(years)

# 去掉x的偏移量,单组柱状图直接用x作为定位参数
pps = ax.bar(x, population, width, label='人口')
for p in pps:
   height = p.get_height()
   ax.annotate('{}'.format(height),
      xy=(p.get_x() + p.get_width() / 2, height),
      xytext=(0, 3), # 向上偏移3个点避免和柱子重叠
      textcoords="offset points",
      ha='center', va='bottom')

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 13:18:02