График NetCDF4 среднемесячной трехмерной переменной данных - PullRequest
1 голос
/ 11 марта 2020

У меня есть код, который выглядит следующим образом

# combine multiple years of .nc files
mf = nc4.MFDataset("//porfiler03/gtdshare/IDL/wtypes/data/avgyears/slp*.nc")
sealpm = mf.variables['slp'][:,:]
print(mf)
print(mf.variables.keys()) # get all variable names
slpm = mf.variables['slp']

, и я пытаюсь построить контур среднемесячного значения для переменной «slpm», имеющей размеры: 4380 x 73 x 144. 1-е измерение (Размер 4380) выражается в единицах времени, которые выглядят следующим образом при преобразовании чисел в формат даты:

timem = mf.variables['time']
time_convertm = nc4.num2date(timem[:], timem.units)

Вывод «time_convertm» выглядит следующим образом:

print(time_convertm)
[datetime.datetime(2017, 1, 1, 0, 0) datetime.datetime(2017, 1, 1, 6, 0)
datetime.datetime(2017, 1, 1, 12, 0) ...
datetime.datetime(2019, 12, 31, 6, 0)
datetime.datetime(2019, 12, 31, 12, 0)
datetime.datetime(2019, 12, 31, 18, 0)]

I Я построил график за один месяц (январь 2017 г. показан ниже), используя следующий код:

#average for current month accounting for days and 4 hr chunks per day
cmonth = mf.variables['slp'][0:31*4][:][:] #Single year first 124 rows for January 2017
cmonthav = cmonth.mean(axis=0)
#-- draw coastlines, state and country boundaries, edge of map
map.drawcoastlines()
map.drawstates()
map.drawcountries()
lons,lats= np.meshgrid(lon,lat) # for this dataset, longitude is 0 through 360, so you need to 
subtract 180 to properly display on map
x,y = map(lons,lats)
clevs = np.arange(960,1040,6)
cs = map.contour(x,y,cmonthav[:,:]/100.,clevs,cmap='jet',linewidths=1.)

В конечном итоге мне нужен график, подобный примеру, показанному НО, для среднего числа, кратного январю в 2017-2019 гг. не один год, как показано. Я не вижу, как усреднить несколько Januarys 'в 2017, 2018 и 2019 годах. Спасибо за ваши идеи!

January 2017 Mean of Daily SLP

...