In [37]:
%matplotlib inline
In [38]:
import sys, os, glob
sys.path.append(os.path.join(os.environ['HOME'], 'pythonlibs/'))
from string import rjust
import numpy as np
from numpy import ma
from netCDF4 import num2date, Dataset, MFDataset
from sets import Set
import colormaps_functions as cf
from matplotlib import cm
from glob import glob
from datetime import datetime, timedelta
from matplotlib import pyplot as plt
from mpl_toolkits.basemap import Basemap
note: change:
resolution='c'
to
resolution='h'
to get basemap in high resolution
In [39]:
def plot_TRMM_ICU(lat,lon,data,vmin,vmax,step,cmap,title,fname):
ll_lon = domain[0]
ur_lon = domain[1]
ll_lat = domain[2]
ur_lat = domain[3]
fig = plt.figure(figsize=(9.5,4.9))
ax = fig.add_axes([0.03,0.05,0.92,0.9])
curr_map = Basemap(projection='cyl', llcrnrlon=ll_lon, llcrnrlat=ll_lat, urcrnrlon=ur_lon, urcrnrlat=ur_lat,\
resolution='c', ax=ax, area_thresh=1000.)
x, y = curr_map(*np.meshgrid(lon, lat))
im = curr_map.pcolormesh(x, y, data, vmin=vmin, vmax=vmax, cmap = cmap)
plt.title(title, fontsize=16)
#curr_map.drawcoastlines(linewidth=1,color='0.8')
curr_map.drawcoastlines(linewidth=0.5,color='k')
#cont_poly = curr_map.fillcontinents(color='k')
#draw parallels and meridians.
delat = 10.
circles = np.arange(-50.,10. + delat, delat)
curr_map.drawparallels(circles, labels=[1,0,0,0], fontsize=14, linewidth=0.8, color='k')
delon = 10.
meridians = np.arange(ll_lon,ur_lon, delon)
curr_map.drawmeridians(meridians, labels=[0,0,0,1], fontsize=14, linewidth=0.8, color='k')
#cb = curr_map.colorbar(im,location='right', pad='2%', size='2%')
cb = curr_map.colorbar(im,location='right', ticks=np.arange(vmin,vmax+step,step), boundaries=np.arange(vmin,vmax+step/2,step/2), drawedges=True, pad='1.8%')
cb.ax.set_yticklabels([str(ll).rjust(3," ") for ll in np.arange(vmin,vmax+step,step,dtype=np.int32)])
cb.set_label("$mm.day^{-1}$", fontsize=16)
for t in cb.ax.get_yticklabels():
t.set_fontsize(12)
t.set_color('k')
plt.savefig(os.path.join(fpath,fname), dpi=200)
In [40]:
today = datetime.utcnow()
In [41]:
if today.day < 25:
date = today - timedelta(days=25)
else:
date = today
print("Processing {}".format(date.strftime("%B %Y")))
In [42]:
fpath = os.path.join(os.environ['HOME'], 'operational/ICU/supplement/TRMM/figures/')
In [43]:
nlat = 400
nlon = 1440
### create lat and lon vectors
lon = np.arange(0.125, 0.125 + nlon * 0.25, 0.25)
lat = np.arange(-49.875, -49.875 + nlat * 0.25, 0.25)
### set the domain we want [lonW, lonE, latS, latN]
domain = [135., 240., -50., 10.]
ilon = np.where( (lon >= domain[0]) & (lon <= domain[1]))[0]
ilat = np.where( (lat >= domain[2]) & (lat <= domain[3]))[0]
lon = lon[ilon]
lat = lat[ilat]
In [44]:
dclimp = os.path.join(os.environ['HOME'],'data/TRMM/climatology/daily')
mclim = ma.empty((12,len(lat),len(lon)))
for i,m in enumerate(np.arange(1,13)):# loop over the months
ml = str(m).rjust(2,"0")
liste_files = glob(os.path.join(dclimp, "3B42_daily."+ml+"*.nc"))
liste_files.sort()
matf = ma.empty((len(liste_files),len(lat),len(lon)))
for ifile, fname in enumerate(liste_files):
nc = Dataset(fname,'r')
latnc = nc.variables['latitude']
lonnc = nc.variables['longitude']
trmm = np.squeeze(nc.variables['hrf'][:,( (lat >= domain[2]) & (lat <= domain[3]) ),\
( (lon >= domain[0]) & (lon <= domain[1]) )])
trmm = ma.masked_values(trmm,-9999.)
matf[ifile,:,:] = trmm
nc.close()
mclim[i,:,:] = matf.mean(0) #mclim is the monthly climatology
In [45]:
plt.imshow(mclim[0,::-1,:])
Out[45]:
In [46]:
ddailyp = os.path.join(os.environ['HOME'],'data/TRMM/daily')
mmonths = ma.empty((len(lat),len(lon)))
amonths = ma.empty((len(lat),len(lon)))
# ml = str(date.month).rjust(2,"0")
ml = date.strftime("%m")
liste_files = glob(os.path.join(ddailyp,"3B42RT_daily." + str(date.year) + "." + ml + ".*.nc"))
liste_files.sort()
matf = ma.empty((len(liste_files),len(lat),len(lon)))
for ifile, fname in enumerate(liste_files):
nc = Dataset(fname,'r')
trmm = np.squeeze(nc.variables['trmm'][:,( (lat >= domain[2]) & (lat <= domain[3]) ),( (lon >= domain[0]) & (lon <= domain[1]) )])
trmm = ma.masked_values(trmm,-99999.)
matf[ifile,:,:] = trmm
nc.close()
# calculate mean
mmonths[:,:] = matf.mean(0)
# calculate anomalies
amonths[:,:] = ma.subtract(matf.mean(0), mclim[(date.month - 1),:,:])
In [49]:
cmap = cf.readnclcolormaps('prcp_1')
plot_TRMM_ICU(lat,lon,mmonths[:,:],0,20,2,cmap,'TRMM rainfall average for {}'.format(date.strftime("%Y / %m")),\
"ave_TRMM_{}.png".format(date.strftime("%Y_%m")))
In [50]:
cmap = cf.gmtColormap('departure')
plot_TRMM_ICU(lat,lon,amonths[:,:],-15.,15.,2,cmap,'TRMM rainfall anomalies for {}'.format(date.strftime("%Y / %m")),\
"anoms_TRMM_{}.png".format(date.strftime("%Y_%m")))