#!/usr/bin/env python # coding: utf-8 # In[1]: import numpy as np import matplotlib.pyplot as plt import pandas as pd import datetime as dt import matplotlib.gridspec as gridspec from matplotlib.colors import LogNorm from salishsea_tools import evaltools as et get_ipython().run_line_magic('matplotlib', 'inline') # In[2]: df=et.loadPSFCTD() # In[3]: # path to model files: PATH= '/results/SalishSea/nowcast-green.201812/' # start and end dates for analysis: start_date = dt.datetime(2015,1,1) end_date = dt.datetime(2018,1,1) # number of days per model file: flen=1 # dictionary mapping desired model variables to the file types where they are found filemap={'vosaline':'grid_T','votemper':'grid_T'} # dictionary mapping model file types to their time resolution in hours (1 is hourly files, 24 is daily) fdict={'ptrc_T':1,'grid_T':1} # results format # -- nowcast: files like 01jan15/SalishSea_1h_20150101_20150101_ptrc_T.nc # -- long: files like SalishSea_1h_20150206_20150804_ptrc_T_20150427-20150506.nc, all in one directory namfmt='nowcast' data=et.matchData(df,filemap,fdict,start_date,end_date,namfmt,PATH,flen,preIndexed=False) # In[4]: fig = plt.figure(figsize = (7.5,3.25)) gs1=gridspec.GridSpec(1,4,left=.08,right=.91,bottom=.1,top=.97, wspace=.2,width_ratios=[1,.1,1,.1]) axT=fig.add_subplot(gs1[0,0]) axS = fig.add_subplot(gs1[0,2]) gscb=gridspec.GridSpecFromSubplotSpec(7,1,subplot_spec=gs1[:,3]) axcb = fig.add_subplot(gscb[1:-1]) axS.plot((0,36),(0,36),'k-',alpha=.2) axT.plot((0,25),(0,25),'k-',alpha=.2) iiT=(~np.isnan(data['CT']))&(~np.isnan(data['mod_votemper'])) iiS=(~np.isnan(data['SA']))&(~np.isnan(data['mod_vosaline'])) counts, xedges, yedges, m1=axT.hist2d(data.loc[iiT,['CT']].values.flatten(), data.loc[iiT,['mod_votemper']].values.flatten(),bins=25*3,norm=LogNorm()) counts, xedges, yedges, m2=axS.hist2d(data.loc[iiS,['SA']].values.flatten(), data.loc[iiS,['mod_vosaline']].values.flatten(),bins=36*3,norm=LogNorm()) cb=fig.colorbar(m1,cax=axcb) cb.set_label('Count') ntick=np.arange(0,36,10) ntickl=[str(i) for i in ntick] axS.set_xlim((0,36)) axS.set_ylim((0,36)) axS.set_xticks(ntick) axS.set_xticklabels(ntickl) axS.set_yticks(ntick) axS.set_yticklabels(ntickl) stick=np.arange(0,25,10) stickl=[str(i) for i in stick] axT.set_xlim((0,25)) axT.set_ylim((0,25)) axT.set_xticks(stick) axT.set_xticklabels(stickl) axT.set_yticks(stick) axT.set_yticklabels(stickl) for ax in (axT,axS): ax.set_aspect(1, adjustable='box') axT.set_ylabel('Modeled',fontsize=12) axS.set_ylabel('Modeled',fontsize=12) axT.set_xlabel('Observed',fontsize=12) axS.set_xlabel('Observed',fontsize=12) axS.set_xlim(5,35) axS.set_ylim(5,35) axS.set_title('S$_A$ (g/kg)',fontsize=12) axT.set_title('$\Theta$ ($^{\circ}$C)',fontsize=12) # In[6]: data.keys() # In[8]: data[['station','ID', 'Patrol','Lat', 'Lon','Z','dtUTC','i', 'j', 'k', 'pressure','chl', 'o2SAT', 'o2uM', 'conductivity', 'temperature', 'SA', 'CT']].to_csv('/data/eolson/results/MEOPAR/oldDBs/PSFCTD.csv',index=False) # In[12]: test=pd.read_csv('/data/eolson/results/MEOPAR/oldDBs/PSFCTD.csv') # In[13]: test # In[15]: data.head() # In[ ]: