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

Matplotlib绘制Datetime日期时X轴刻度重复显示的原因及解决办法

为什么Matplotlib日期X轴刻度重复,以及如何修复

我来帮你分析这个问题并给出解决方案。你遇到的X轴刻度重复的情况,本质是Matplotlib的自动刻度生成机制在捣鬼。

问题原因

当你只提供3个天级的日期数据时,Matplotlib默认的AutoDateLocator会尝试在日期范围内生成“合理”的刻度——哪怕这个范围只有2天(从3月17到3月19),它可能会生成更细粒度的刻度(比如按小时划分)。但这些小时级的刻度对应的日期都是同一天,经过DateFormatter格式化后,就会显示成同一个日期字符串,看起来像是17号、18号的刻度重复出现了好几次。

解决方法

要避免这种情况,最简单的方式就是手动指定X轴的刻度为你自己的日期列表,不让Matplotlib自动生成多余的刻度。你只需要在代码里明确指定刻度来源,就能强制X轴只显示你提供的三个日期。

修改后的完整代码

import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

dates = [datetime.date(2022, 3, 17), datetime.date(2022, 3, 18), datetime.date(2022, 3, 19)]
b = (0,1,2)

plt.errorbar(dates, b, fmt = '.')
myFmt = mdates.DateFormatter('%d-%m-%y')
plt.gca().xaxis.set_major_formatter(myFmt)

# 手动绑定X轴刻度为我们的日期列表,同时设置旋转角度
plt.xticks(dates, rotation=30)

plt.show()

替代方案(保留自动刻度逻辑)

如果你想保留Matplotlib的自动刻度逻辑,但希望强制按天生成刻度,也可以调整AutoDateLocator的参数:

import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

dates = [datetime.date(2022, 3, 17), datetime.date(2022, 3, 18), datetime.date(2022, 3, 19)]
b = (0,1,2)

plt.errorbar(dates, b, fmt = '.')
myFmt = mdates.DateFormatter('%d-%m-%y')

# 强制按天生成刻度,每天一个
locator = mdates.AutoDateLocator(intervald=1)
plt.gca().xaxis.set_major_locator(locator)
plt.gca().xaxis.set_major_formatter(myFmt)

plt.xticks(rotation=30)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:18:10