我有一个netcdf文件的二维变量XVAR,尺寸为[年,月]。我想绘制平坦的XVAR(1D阵列,长度为n *年),并设置x轴为:主要蜱的年数,以及次要蜱的月数。难点是我不知道如何在每月一步创建一个1d阵列。没有monthdelta方法可以使用(尽管我明白原因是因为每个月都有不同的天数)。如何在matplotlib中使用年份作为tickmarks来设置x轴?
在delta =?下面的步骤中,我尝试了delta = relativedelta.relativedelta(months = 1),但得到了一个错误“object has no attribute'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')
看起来像'drange'需要'datetime.timedelta'。尝试'delta = datetime.timedelta(30)'获得30天的增量。我承认不确定matplotlib如何处理月份,因为每个月都是不同的天数。 –
也许最好设置你自己的范围。可能类似于:'date = mdates.date2num([date(np.min(yrs)+(i/12),i%12 + 1,1)for i in range(12 *(np.max(yrs) - np.min(年)+1))])'? –