Python Matplotlib-在contourf plot上每个月的第一次绘制x记号

Python Matplotlib-在contourf plot上每个月的第一次绘制x记号,python,datetime,matplotlib,xticks,Python,Datetime,Matplotlib,Xticks,问题 #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) 我有一个填充的等

问题

#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)
我有一个填充的等高线图和一些时间序列数据,时间在x轴上,高度在y轴上。我制作了一个日期时间列表,可以用它来代替通常用作x轴刻度的默认数字列表。这很好,但我希望xticks在每个月的第一天绘制,而不是每30天绘制一次。我知道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)
('1/1/2000'、'3/1/2000')

问题


如何在每个月的第一天而不是以设定的间隔绘制x-ticks图?

您可以将x轴主定位器设置为使用,但必须向提供
x
Y
参数,并且
x
数组必须由
datetime
填充,即

将numpy导入为np
从datetime导入datetime,timedelta
将matplotlib.pyplot作为plt导入
从matplotlib导入代码
从matplotlib.dates导入MonthLocator、DateFormatter
数据=np.random.randint(0,50,(10,61))
日期=[datetime.strTime('01-01-2000','%m-%d-%Y')+d的时间增量(d)
范围内(len(数据[0]))]
克里夫斯=np.arange(0,50,5)
图,ax=plt.子批次(图尺寸=(10,5))
im=ax.contourf(日期、范围(data.shape[0]),数据、级别=clevels,
cmap='RdBu_r',extend='both')
ax.设置标签(“级别”)
ax.xaxis.set\u major\u定位器(MonthLocator())
ax.xaxis.set\u major\u格式化程序(日期格式化程序(“%m/%d/%Y”))
cbar=plt.colorbar(im,值=clevels,pad=0.01)
plt.show()
然后,这将在每个月的指定日期自动放置主刻度(默认为每个月的第一个):

#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)