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
相关产品推荐
相关产品推荐

