如何对离散轴(如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
相关产品推荐
相关产品推荐

