Matplotlib日期轴显示异常:数据量少于6条时不显示年份
解决Matplotlib日期X轴数据量少隐藏年份的问题
我完全懂你遇到的这个小麻烦——当数据条目不足6条时,Matplotlib会自动把X轴日期里的年份给藏起来,哪怕所有日期都在同一年,看不到年份总觉得有点别扭对吧?
下面给你两个实用的解决办法,轻松搞定这个问题:
方法1:强制指定日期显示格式
用matplotlib.dates.DateFormatter来手动设置X轴的日期格式,不管数据量多少,都按照你想要的样式展示。修改后的代码如下:
import matplotlib.pyplot as plt import datetime as dt import matplotlib.dates as mdates Dates = ['2018/04/01', '2018/04/02', '2018/04/03', '2018/04/04', '2018/04/05'] y = [10, 20, 30, 56, 42] x = [dt.datetime.strptime(date, '%Y/%m/%d').date() for date in Dates] plt.xticks(rotation=20) # 自定义日期格式,包含年、月、日 date_formatter = mdates.DateFormatter('%Y/%m/%d') plt.gca().xaxis.set_major_formatter(date_formatter) plt.plot(x, y) plt.show()
这样不管你有几条数据,X轴都会稳稳显示完整的年/月/日格式。
方法2:手动控制刻度密度+格式
有时候Matplotlib会根据数据量自动调整刻度数量,我们可以强制让每个日期都成为刻度,再搭配格式器确保年份显示,适合数据量少的场景:
import matplotlib.pyplot as plt import datetime as dt import matplotlib.dates as mdates Dates = ['2018/04/01', '2018/04/02', '2018/04/03', '2018/04/04', '2018/04/05'] y = [10, 20, 30, 56, 42] x = [dt.datetime.strptime(date, '%Y/%m/%d').date() for date in Dates] plt.xticks(rotation=20) # 设置主刻度为每一天 plt.gca().xaxis.set_major_locator(mdates.DayLocator()) # 设置日期显示格式 plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d')) plt.plot(x, y) plt.show()
补充说明:为什么会出现这个问题?
Matplotlib的自动日期格式化逻辑是为了避免X轴标签拥挤,当数据点较少时,它会自动简化日期格式(比如只显示月和日)。但我们可以通过上面的方法手动覆盖默认行为,完全按照自己的需求展示日期。
内容的提问来源于stack exchange,提问作者Matistjati
相关产品推荐
相关产品推荐

