Source code for cablab.dat

"""
.. _xarray.Dataset: http://xarray.pydata.org/en/stable/data-structures.html#dataset
.. _xarray.DataArray: http://xarray.pydata.org/en/stable/data-structures.html#dataarray
.. _Numpy: http://www.numpy.org/

The following functions provide the high-level API of the ESDC Python DAT.
It provides additional analytical utility functions which work for `xarray.Dataset`_ objects
which are used to represent the ESDC data. 
"""

import xarray as xr

[docs]def corrcf(ds, var1=None, var2=None, dim='time'): ''' Function calculating the correlation coefficient of two variables **var1** and **var2** in one `xarray.Dataset`_ **ds**. :param ds: an `xarray.Dataset`_ :param var1: Variable 1 :param var2: Variable 2, both have to be of identical size :param dim: dimension for aggregation, default is time. In the default case, the result is an image :return: ''' if not isinstance(ds, xr.Dataset): print('Input object ', ds, ' is no xarray Dataset!') var1 = None if var1 is not None: if var2 is None: var2 = var1 ds_tmean = ds.mean(skipna=True, dim=dim) ds_tstd = ds.std(skipna=True, dim=dim) covar_1 = (ds[var1] - ds_tmean[var1]) * (ds[var2] - ds_tmean[var2]) res = covar_1.mean(dim='time', skipna=True) / (ds_tstd[var1] * ds_tstd[var2]) else: res = None return res
[docs]def map_plot(ds, var=None, time=0, title_str='No title', projection='kav7', lon_0=0, resolution=None, **kwargs): ''' Function plotting a projected map for a variable **var** in `xarray.Dataset`_ **ds**. :param ds: an `xarray.Dataset`_ :param var: variable to plot :param time: time step or datetime date to plot :param title_str: Title string :param projection: for Basemap :param lon_0: longitude 0 for central :param resolution: resolution for Basemap object :param kwargs: Any other **kwargs** accepted by the pcolormap function of Basemap :return: ''' if isinstance(time, int): res = ds[var].isel(time=time) elif time is None: res = ds[var] time = None else: try: res = ds[var].sel(time=time, method='nearest') except: print("Wrong date format, should be YYYY-MM-DD") raise lons, lats = np.meshgrid(np.array(res.lon), np.array(res.lat)) ma_res = np.ma.array(res, mask=np.isnan(res)) if "vmin" in kwargs: vmin = kwargs["vmin"] else: vmin = None if "vmax" in kwargs: vmax = kwargs["vmax"] else: vmax = None if title_str == "No title": title_str = var + ' ' + str(time) else: title_str = title_str + ' ' + str(res.time.values)[0:10] fig = plt.figure() ax = fig.add_axes([0.05, 0.05, 0.9, 0.9]) m = Basemap(projection, lon_0, resolution) m.drawmapboundary(fill_color='0.3') ccmap = plt.cm.jet ccmap.set_bad("gray", 1.) im = m.pcolormesh(lons, lats, ma_res, shading='flat', cmap=ccmap, latlon=True, vmin=vmin, vmax=vmax, **kwargs) # lay-out m.drawparallels(np.arange(-90., 99., 30.)) m.drawmeridians(np.arange(-180., 180., 60.)) cb = m.colorbar(im, "bottom", size="5%", pad="2%") cb.set_label(ds[var].attrs['standard_name'] + ' (' + ds[var].attrs['units'] + ')') ax.set_title(title_str) # write to disk if specified if "plot_me" in kwargs: if kwargs["plot_me"] == True: plt.savefig(title_str[0:15] + '.png', dpi=600) fig.set_size_inches(8, 12) return fig, ax, m