如何修改Matplotlib日期主刻度标签为Jan-23格式
解决Matplotlib日期刻度标签修改问题
方法一:统一修改月年格式模板
ConciseDateFormatter默认会将月、年分两行显示,你可以直接修改它的格式字典,指定月-年的单行显示样式:
fig, ax = plt.subplots(figsize=(12, 6), constrained_layout=True) ax.xaxis.set_major_locator(mdates.MonthLocator(interval=1)) # 初始化格式化器并修改月年显示模板 formatter = mdates.ConciseDateFormatter(ax.xaxis.get_major_locator()) # formats索引2对应「月-年」的显示场景,%b是缩写月份,%y是两位年份 formatter.formats[2] = '%b-%y' ax.xaxis.set_major_formatter(formatter) ax.xaxis.set_minor_locator(mdates.MonthLocator(bymonthday=(15))) data_toplot.plot(ax=ax) for label in ax.get_xticklabels(which='major'): label.set(rotation=0, horizontalalignment='center')
方法二:单独修改指定刻度标签
如果只需要修改Jan\n2023这一个标签,可在绘图完成后遍历刻度标签,匹配目标文本并替换:
fig, ax = plt.subplots(figsize=(12, 6), constrained_layout=True) ax.xaxis.set_major_locator(mdates.MonthLocator(interval=1)) ax.xaxis.set_major_formatter( mdates.ConciseDateFormatter(ax.xaxis.get_major_locator())) ax.xaxis.set_minor_locator(mdates.MonthLocator(bymonthday=(15))) data_toplot.plot(ax=ax) for label in ax.get_xticklabels(which='major'): label.set(rotation=0, horizontalalignment='center') # 匹配目标标签文本并替换格式 if label.get_text() == 'Jan\n2023': label.set_text('Jan-23')
补充说明
- 方法一适合批量调整所有「月-年」类型的刻度标签,无需逐个匹配;
- 方法二更精准,仅针对特定标签修改,适合只需要调整单个标签的场景。
内容的提问来源于stack exchange,提问作者PerseP
相关产品推荐
相关产品推荐

