我有一个来自netcdf文件的2D变量XVAR,其维度为[year,month]。我想绘制扁平的XVAR(1D阵列,长度为nyear * nmonth),并将x轴设置为:主要刻度的年份和次要刻度的月份。困难在于我不知道如何在每月步骤创建一个1d数组。我没有使用Monthdelta方法(虽然我知道原因是因为每个月都有不同的天数)。
在delta =?在下面的步骤中,我尝试了delta = relativedelta.relativedelta(months = 1),但得到了错误"对象没有属性' total_seconds'",我完全不了解。
import numpy as np
from netCDF4 import Dataset
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from mpl_toolkits.basemap import Basemap
from datetime import date, timedelta
ncfile = Dataset('filepath',mode='r')
XVAR4d = ncfile.variables['XVAR'][:]
XVAR2d = np.nanmean(XVAR4d,axis=(2,3)).flatten()
yrs = ncfile.variables['YEAR']
stt = date(np.min(yrs),1,1)
end = date(np.max(yrs)+1,1,1)
delta = ?
dates = mdates.drange(stt,end,delta)
years = mdates.YearLocator() # every year
months = mdates.MonthLocator() # every month
yearsFmt = mdates.DateFormatter('%Y')
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax1.xaxis.set_major_locator(years)
ax1.xaxis.set_major_formatter(yearsFmt)
ax1.xaxis.set_minor_locator(months)
ax1.set_xlim(stt,end)
ax1.plot(dates,xvar2d,c='r')
答案 0 :(得分:0)
我觉得我确实喜欢我的第二条评论,所以我把它变成了一个实际的建议答案。
不要使用drange
,而是自己创建日期:
totalMonths = 12*(np.max(yrs) - np.min(yrs)+1)
dates = mdates.date2num([date(np.min(yrs)+(i//12),i%12+1,1) for i in range(totalMonths)])