def METHOD_NAME(obs_name, obs_dict, base_dir, season):
    """
    Plots time-series output of properties in an ocean region.
    obs_name : str
        The name of the observational data set
    obs_dict : dict
        Information on the observational data sets
    base_dir : str
        The base directory where observations are found and the climatology
        should be written
    season : str
        The season over which to compute the climatology
    """
    # Authors
    # -------
    # Xylar Asay-Davis
    componentName = 'ocean'
    fileName = obs_dict['outFileTemplate'].format(season)
    daskThreads = multiprocessing.cpu_count()
    base_dir = '{}/observations/Ocean'.format(base_dir)
    with dask.config.set(schedular='threads',
                         pool=ThreadPool(daskThreads)):
        print("\n computing T S climatogy for {}...".format(
            obs_name))
        chunk = {obs_dict['tVar']: 6}
        TVarName = obs_dict['TVar']
        SVarName = obs_dict['SVar']
        zVarName = obs_dict['zVar']
        lonVarName = obs_dict['lonVar']
        latVarName = obs_dict['latVar']
        volVarName = obs_dict['volVar']
        obsFileName = '{}/{}'.format(base_dir, obs_dict['TFileName'])
        print('  Reading from {}...'.format(obsFileName))
        ds = xarray.open_dataset(obsFileName, chunks=chunk)
        if obs_dict['SFileName'] != obs_dict['TFileName']:
            obsFileName = '{}/{}'.format(base_dir, obs_dict['SFileName'])
            print('  Reading from {}...'.format(obsFileName))
            dsS = xarray.open_dataset(obsFileName, chunks=chunk)
            ds[SVarName] = dsS[SVarName]
        if obs_dict['volFileName'] is None:
            # compute volume from lat, lon, depth bounds
            print('  Computing volume...'.format(obsFileName))
            latBndsName = ds[latVarName].attrs['bounds']
            lonBndsName = ds[lonVarName].attrs['bounds']
            zBndsName = ds[zVarName].attrs['bounds']
            latBnds = ds[latBndsName]
            lonBnds = ds[lonBndsName]
            zBnds = ds[zBndsName]
            dLat = numpy.deg2rad(latBnds[:, 1] - latBnds[:, 0])
            dLon = numpy.deg2rad(lonBnds[:, 1] - lonBnds[:, 0])
            lat = numpy.deg2rad(ds[latVarName])
            dz = zBnds[:, 1] - zBnds[:, 0]
            radius = 6378137.0
            area = radius**2*numpy.cos(lat)*dLat*dLon
            ds[volVarName] = dz*area
        elif obs_dict['volFileName'] != obs_dict['TFileName']:
            obsFileName = '{}/{}'.format(base_dir, obs_dict['volFileName'])
            print('  Reading from {}...'.format(obsFileName))
            dsVol = xarray.open_dataset(obsFileName)
            ds[volVarName] = dsVol[volVarName]
        chunk = {obs_dict['latVar']: 400,
                 obs_dict['lonVar']: 400}
        ds = ds.chunk(chunks=chunk)
        if obs_dict['tVar'] in ds.dims:
            if obs_dict['tVar'] != 'Time':
                if obs_dict['tVar'] == 'month':
                    ds = ds.rename({obs_dict['tVar']: 'Time'})
                    ds.coords['month'] = ds['Time']
                else:
                    ds = ds.rename({obs_dict['tVar']: 'Time'})
            if 'year' not in ds:
                ds.coords['year'] = numpy.ones(ds.sizes['Time'], int)
            monthValues = constants.monthDictionary[season]
            print('  Computing climatology...')
            ds = compute_climatology(ds, monthValues, maskVaries=True)
        print('  Broadcasting z coordinate...')
        if 'positive' in ds[zVarName].attrs and \
                ds[zVarName].attrs['positive'] == 'down':
            attrs = ds[zVarName].attrs
            ds[zVarName] = -ds[zVarName]
            ds[zVarName].attrs = attrs
            ds[zVarName].attrs['positive'] = 'up'
        T, S, z = xarray.broadcast(ds[TVarName], ds[SVarName],
                                   ds[zVarName])
        ds['zBroadcast'] = z
        print('  writing {}...'.format(fileName))
        fileName = '{}/{}'.format(base_dir, fileName)
        write_netcdf(ds, fileName)
        print('  Done!')