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

如何对离散轴(如0索引条形图)的刻度标签排序:解决月份标签起始异常

你遇到的x轴从2月开始显示的问题,核心是matplotlib.dates.MonthLocator默认以每月1日作为刻度定位点,而你的数据日期都是当月最后一天,1月31日的坐标点距离2月1日极近,导致自动计算的轴范围没有覆盖到1月的刻度点,最终标签从2月开始展示。

方案一:直接使用月份文本作为x轴(推荐,适合离散月份统计场景)

这种方法跳过日期轴的自动定位逻辑,直接用提取好的月份标签作为x轴刻度,不会出现偏移问题,代码更简洁:

import pandas as pd
import matplotlib.pyplot as plt

# 原始数据构建
data = {'Birthday': ['1900-01-31', '1900-02-28', '1900-03-31', '1900-04-30', '1900-05-31', '1900-06-30', '1900-07-31', '1900-08-31', '1900-09-30', '1900-10-31', '1900-11-30', '1900-12-31'],
        'Players': [32, 25, 27, 19, 27, 18, 18, 21, 23, 21, 26, 23]}
df = pd.DataFrame(data)

# 转换日期格式,提取月份缩写作为x轴标签
df['Birthday'] = pd.to_datetime(df['Birthday'])
df['month_label'] = df['Birthday'].dt.strftime('%b')

# 绘制条形图
plt.figure(figsize=(12,7))
plt.bar(df['month_label'], df['Players'], color='maroon', width=0.6)
plt.show()

方案二:保留日期轴,手动调整轴范围

如果你需要保留连续日期轴的逻辑,可以手动指定x轴的起始范围,确保覆盖1月的刻度点:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 原始数据构建
data = {'Birthday': ['1900-01-31', '1900-02-28', '1900-03-31', '1900-04-30', '1900-05-31', '1900-06-30', '1900-07-31', '1900-08-31', '1900-09-30', '1900-10-31', '1900-11-30', '1900-12-31'],
        'Players': [32, 25, 27, 19, 27, 18, 18, 21, 23, 21, 26, 23]}
df = pd.DataFrame(data)
df['Birthday'] = pd.to_datetime(df['Birthday'])

fig = plt.figure(figsize=(12, 7))
ax = plt.gca()
# 手动设置x轴范围,从1900年1月1日到1901年1月1日,完整覆盖12个月份的刻度点
ax.set_xlim(pd.Timestamp('1900-01-01'), pd.Timestamp('1901-01-01'))
# 设置月份定位和格式化
locator = mdates.MonthLocator()
fmt = mdates.DateFormatter('%b')
ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(fmt)
# 绘制条形图
plt.bar(df['Birthday'], df['Players'], color = 'maroon', width=10)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:36:02