使用matplotlib绘制时间序列数据,并仅在年初显示年份

时间:2018-04-09 04:37:36

标签: python matplotlib

rcParams['date.autoformatter.month'] = "%b\n%Y"

我正在使用matpltolib绘制时间序列,如果我将rcParams设置为如上所示,则生成的绘图在每个刻度处都标有月份名称和年份。我该如何设置它以便每年只绘制在每年的1月。我试过这样做,但它不起作用:

rcParams['date.autoformatter.month'] = "%b"
rcParams['date.autoformatter.year'] = "%Y"

1 个答案:

答案 0 :(得分:2)

格式化程序不允许指定它们的条件。根据系列的跨度,AutoDateFormatter将落在date.autoformatter.month范围或date.autoformatter.year范围内。

此外,AutoDateLocator可能不一定决定实际在1月1日打勾。

因此我建议将代码直接指定为所需的格式和位置。您可以使用主要刻度来显示年份,并使用次要刻度来显示月份。然后,主要刻度的格式可以获得换行符,以便不与次要刻度标签重叠。

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

t = [datetime(2016,1,1), datetime(2017,12,31)]
x = [0,1]

fig, ax = plt.subplots()
ax.plot(t,x)

ax.xaxis.set_major_locator(matplotlib.dates.YearLocator())
ax.xaxis.set_minor_locator(matplotlib.dates.MonthLocator((1,4,7,10)))

ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter("\n%Y"))
ax.xaxis.set_minor_formatter(matplotlib.dates.DateFormatter("%b"))
plt.setp(ax.get_xticklabels(), rotation=0, ha="center")

plt.show()

enter image description here

然后你也可以调整次要标记'在需要的情况下,长度与主要长度相匹配,

ax.tick_params(axis="x", which="both", length=4)