问题
我有一个填充的等高线图和一些时间序列数据,时间在 x 轴上,高度在 y 轴上。我制作了一个日期时间列表,可以用它代替 x 轴刻度来代替通常用作 x 刻度的默认数字列表。这很好,但我希望在每个月的第一天而不是每 30 天绘制一次 xticks。我知道 mpl.dates 中有一个 MonthLocator 函数,但我不知道如何正确使用它。我发现的所有示例都使用线图,而不是轮廓图,并且轴在两者之间的工作方式不同。
工作示例
#Modules
import numpy as np
import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import ticker
%matplotlib inline
#Data
data = np.random.randint(0,50,(10,61))
print(data.shape)
(10, 61)
#Dates
dates = []
base = dt.datetime(2000,1,1,1)
for i in range(len(data[1])):
date = base + dt.timedelta(days=i)
dates.append(str(date.strftime("%-m/%-d/%-Y")))
print(dates[0], dates[-1])
('1/1/2000', '3/1/2000')
#Levels
levels = np.arange(1,len(data[1])+1)
clevels = np.arange(0,50,5)
#Figure
fig, ax = plt.subplots(figsize=(10, 5))
im = ax.contourf(data,levels,levels=clevels,cmap='RdBu_r',extend='both')
#Axis customization
ax.set_xticklabels(dates)
plt.xticks(np.arange(len(dates))[::30],dates[::30])
ax.set_ylabel("Level")
cbar = plt.colorbar(im,values=clevels,pad=0.01)
问题
如何使 x-ticks 绘制每个月的第一天而不是按设定的时间间隔绘制?