import sqlalchemy
from sqlalchemy import (create_engine, Column, String, Integer, Float, MetaData,
Table, type_coerce, ForeignKey, case)
from sqlalchemy.orm import mapper, create_session, relationship, aliased, Session
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import case
import numpy as np
from sqlalchemy.ext.automap import automap_base
import matplotlib.pyplot as plt
import sqlalchemy.types as types
from sqlalchemy.sql import and_, or_, not_, func
from sqlalchemy.sql import select
import os
from os.path import isfile
import pandas as pd
import netCDF4 as nc
import datetime as dt
from salishsea_tools import evaltools as et, viz_tools
import datetime as dt
import glob
import gsw
%matplotlib inline
PATH= '/results/SalishSea/spinup.201905.yr1/'
start_date = dt.datetime(2013,1,1)
end_date = dt.datetime(2013,9,25)
flen=1
namfmt='nowcast'
filemap={'nitrate':'ptrc_T','silicon':'ptrc_T','ammonium':'ptrc_T','diatoms':'ptrc_T','ciliates':'ptrc_T','flagellates':'ptrc_T','vosaline':'grid_T','votemper':'grid_T'}
fdict={'ptrc_T':1,'grid_T':1}
df1=et.loadDFO(datelims=(start_date,end_date))#,excludeSaanich=False)
df1.head()
Year | Month | Day | Hour | Lat | Lon | Pressure | Depth | Ammonium | Ammonium_units | Chlorophyll_Extracted | Chlorophyll_Extracted_units | N | Si | Silicate_units | AbsSal | ConsT | Z | dtUTC | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2013.0 | 4.0 | 11.0 | 20.848333 | 49.402167 | -124.1555 | 2.6 | None | None | None | 11.82 | mg/m^3 | 3.0 | 7.2 | umol/L | 27.743770 | 9.789540 | 2.57784 | 2013-04-11 20:50:54 |
1 | 2013.0 | 4.0 | 11.0 | 20.848333 | 49.402167 | -124.1555 | 4.8 | None | None | None | 11.67 | mg/m^3 | 2.9 | 7.3 | umol/L | 27.744457 | 9.787385 | 4.75906 | 2013-04-11 20:50:54 |
2 | 2013.0 | 4.0 | 11.0 | 20.848333 | 49.402167 | -124.1555 | 10.2 | None | None | None | NaN | mg/m^3 | NaN | NaN | umol/L | 27.749606 | 9.667316 | 10.1129 | 2013-04-11 20:50:54 |
3 | 2013.0 | 4.0 | 11.0 | 20.848333 | 49.402167 | -124.1555 | 19.7 | None | None | None | 11.88 | mg/m^3 | 10.6 | 18.5 | umol/L | 28.459715 | 9.127710 | 19.5313 | 2013-04-11 20:50:54 |
4 | 2013.0 | 4.0 | 11.0 | 20.848333 | 49.402167 | -124.1555 | 29.9 | None | None | None | NaN | mg/m^3 | 24.1 | 47.6 | umol/L | 29.363611 | 8.447678 | 29.6432 | 2013-04-11 20:50:54 |
plt.hist(df1.Month)
(array([563., 0., 0., 0., 0., 217., 0., 338., 0., 13.]), array([4. , 4.4, 4.8, 5.2, 5.6, 6. , 6.4, 6.8, 7.2, 7.6, 8. ]), <a list of 10 Patch objects>)
data=et.matchData(df1,filemap, fdict, start_date, end_date, namfmt, PATH, flen)
data.head()
Year | Month | Day | Hour | Lat | Lon | Pressure | Depth | Ammonium | Ammonium_units | ... | i | mod_nitrate | mod_silicon | mod_ammonium | mod_diatoms | mod_ciliates | mod_flagellates | mod_vosaline | mod_votemper | k | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2013.0 | 4.0 | 3.0 | 14.939444 | 49.970833 | -124.6825 | 4.7 | None | None | None | ... | 190 | 0.548628 | 6.399379 | 0.440082 | 5.688290 | 0.268555 | 0.524411 | 27.609800 | 10.152428 | 4 |
1 | 2013.0 | 4.0 | 3.0 | 14.939444 | 49.970833 | -124.6825 | 9.9 | None | None | None | ... | 190 | 11.481730 | 26.726488 | 1.101039 | 5.689577 | 0.193569 | 0.341572 | 28.311152 | 8.812274 | 9 |
2 | 2013.0 | 4.0 | 3.0 | 14.939444 | 49.970833 | -124.6825 | 21.3 | None | None | None | ... | 190 | 26.325640 | 54.592690 | 1.316902 | 0.470348 | 0.081232 | 0.077165 | 29.395172 | 8.410794 | 19 |
3 | 2013.0 | 4.0 | 3.0 | 14.939444 | 49.970833 | -124.6825 | 22.8 | None | None | None | ... | 190 | 26.325640 | 54.592690 | 1.316902 | 0.470348 | 0.081232 | 0.077165 | 29.395172 | 8.410794 | 19 |
4 | 2013.0 | 4.0 | 3.0 | 14.939444 | 49.970833 | -124.6825 | 25.2 | None | None | None | ... | 190 | 26.856123 | 55.250294 | 1.246484 | 0.337995 | 0.069814 | 0.068710 | 29.566582 | 8.472906 | 20 |
5 rows × 30 columns
data.loc[data.Chlorophyll_Extracted>10]
Year | Month | Day | Hour | Lat | Lon | Pressure | Depth | Ammonium | Ammonium_units | ... | i | mod_nitrate | mod_silicon | mod_ammonium | mod_diatoms | mod_ciliates | mod_flagellates | mod_vosaline | mod_votemper | k | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
312 | 2013.0 | 4.0 | 11.0 | 11.143889 | 49.029833 | -123.436167 | 2.7 | None | None | None | ... | 264 | 13.290957 | 27.664791 | 2.491055 | 0.618804 | 0.186262 | 0.059024 | 28.307165 | 8.962428 | 2 |
328 | 2013.0 | 4.0 | 11.0 | 20.848333 | 49.402167 | -124.155500 | 2.6 | None | None | None | ... | 204 | 5.680586 | 16.840712 | 2.244794 | 0.891690 | 0.224059 | 0.062258 | 24.934200 | 9.683742 | 2 |
329 | 2013.0 | 4.0 | 11.0 | 20.848333 | 49.402167 | -124.155500 | 4.8 | None | None | None | ... | 204 | 6.367824 | 17.839087 | 2.291835 | 0.886654 | 0.219737 | 0.062351 | 25.252041 | 9.556385 | 4 |
331 | 2013.0 | 4.0 | 11.0 | 20.848333 | 49.402167 | -124.155500 | 19.7 | None | None | None | ... | 204 | 16.340393 | 33.991100 | 2.620600 | 0.353107 | 0.138303 | 0.056986 | 28.383747 | 8.729556 | 18 |
343 | 2013.0 | 4.0 | 12.0 | 0.524722 | 49.443333 | -124.338500 | 2.1 | None | None | None | ... | 183 | 6.909050 | 18.532736 | 2.255384 | 1.271513 | 0.237962 | 0.063746 | 25.652113 | 9.804106 | 2 |
345 | 2013.0 | 4.0 | 12.0 | 0.524722 | 49.443333 | -124.338500 | 9.8 | None | None | None | ... | 183 | 10.057865 | 22.448006 | 2.731139 | 0.721713 | 0.208464 | 0.066235 | 27.310566 | 9.210092 | 9 |
346 | 2013.0 | 4.0 | 12.0 | 0.524722 | 49.443333 | -124.338500 | 20.3 | None | None | None | ... | 183 | 17.692408 | 37.115620 | 2.621187 | 0.252002 | 0.141715 | 0.064859 | 28.466013 | 8.765588 | 18 |
361 | 2013.0 | 4.0 | 12.0 | 3.034444 | 49.509667 | -124.463833 | 2.5 | None | None | None | ... | 173 | 10.293472 | 22.706141 | 2.644080 | 0.747765 | 0.236320 | 0.069472 | 27.512262 | 9.833039 | 2 |
363 | 2013.0 | 4.0 | 12.0 | 3.034444 | 49.509667 | -124.463833 | 9.9 | None | None | None | ... | 173 | 12.369872 | 26.672171 | 2.649645 | 0.642508 | 0.218012 | 0.071385 | 27.819229 | 9.370308 | 9 |
364 | 2013.0 | 4.0 | 12.0 | 3.034444 | 49.509667 | -124.463833 | 19.7 | None | None | None | ... | 173 | 21.331158 | 44.175171 | 2.291576 | 0.251590 | 0.114793 | 0.062665 | 29.115417 | 8.594073 | 18 |
374 | 2013.0 | 4.0 | 12.0 | 5.771389 | 49.592667 | -124.638167 | 2.5 | None | None | None | ... | 157 | 13.485579 | 28.211292 | 2.642432 | 0.921874 | 0.221238 | 0.070615 | 28.573500 | 9.244478 | 2 |
376 | 2013.0 | 4.0 | 12.0 | 5.771389 | 49.592667 | -124.638167 | 9.8 | None | None | None | ... | 157 | 13.928384 | 29.107447 | 2.742717 | 0.673595 | 0.205021 | 0.070713 | 28.660341 | 9.093882 | 9 |
377 | 2013.0 | 4.0 | 12.0 | 5.771389 | 49.592667 | -124.638167 | 20.0 | None | None | None | ... | 157 | 17.760056 | 36.804306 | 2.521186 | 0.458264 | 0.144252 | 0.064987 | 29.006037 | 8.897673 | 18 |
386 | 2013.0 | 4.0 | 12.0 | 8.661389 | 49.726833 | -124.680167 | 2.4 | None | None | None | ... | 168 | 5.878627 | 14.055737 | 2.861417 | 0.562675 | 0.242982 | 0.068882 | 26.807375 | 9.736365 | 2 |
388 | 2013.0 | 4.0 | 12.0 | 8.661389 | 49.726833 | -124.680167 | 10.1 | None | None | None | ... | 168 | 10.484881 | 21.830469 | 3.036012 | 0.395860 | 0.193837 | 0.064722 | 28.372532 | 9.302079 | 10 |
389 | 2013.0 | 4.0 | 12.0 | 8.661389 | 49.726833 | -124.680167 | 19.9 | None | None | None | ... | 168 | 20.420708 | 42.272526 | 2.266712 | 0.289438 | 0.115022 | 0.056619 | 29.119356 | 8.680081 | 18 |
403 | 2013.0 | 4.0 | 12.0 | 11.568333 | 49.883333 | -124.993500 | 2.0 | None | None | None | ... | 141 | 9.686026 | 20.600424 | 2.674127 | 1.007968 | 0.219518 | 0.061663 | 28.077101 | 9.495545 | 1 |
405 | 2013.0 | 4.0 | 12.0 | 11.568333 | 49.883333 | -124.993500 | 10.0 | None | None | None | ... | 141 | 22.331600 | 45.854149 | 2.028494 | 0.194754 | 0.104956 | 0.056663 | 29.604847 | 8.819620 | 9 |
406 | 2013.0 | 4.0 | 12.0 | 11.568333 | 49.883333 | -124.993500 | 20.1 | None | None | None | ... | 141 | 22.868708 | 46.786217 | 1.860957 | 0.187133 | 0.092785 | 0.053171 | 29.732216 | 8.851438 | 18 |
419 | 2013.0 | 4.0 | 12.0 | 15.183333 | 49.961333 | -125.147000 | 2.6 | None | None | None | ... | 129 | 19.138435 | 39.620335 | 2.080917 | 0.417651 | 0.131608 | 0.058667 | 29.357100 | 9.065556 | 2 |
422 | 2013.0 | 4.0 | 12.0 | 15.183333 | 49.961333 | -125.147000 | 9.8 | None | None | None | ... | 129 | 23.218901 | 47.357906 | 1.600570 | 0.264124 | 0.081919 | 0.046615 | 29.837925 | 8.960051 | 9 |
423 | 2013.0 | 4.0 | 12.0 | 15.183333 | 49.961333 | -125.147000 | 20.3 | None | None | None | ... | 129 | 24.789686 | 50.226654 | 1.406916 | 0.196404 | 0.060952 | 0.039555 | 30.035778 | 8.916419 | 18 |
431 | 2013.0 | 4.0 | 13.0 | 1.303611 | 49.318667 | -123.800167 | 2.3 | None | None | None | ... | 246 | 9.507198 | 23.660114 | 2.258392 | 1.403370 | 0.214779 | 0.067242 | 25.948977 | 9.184166 | 2 |
433 | 2013.0 | 4.0 | 13.0 | 1.303611 | 49.318667 | -123.800167 | 9.7 | None | None | None | ... | 246 | 10.198633 | 24.471125 | 2.326324 | 1.251530 | 0.207394 | 0.065604 | 26.300194 | 9.198015 | 9 |
447 | 2013.0 | 4.0 | 13.0 | 5.085000 | 49.163667 | -123.554667 | 2.7 | None | None | None | ... | 263 | 12.720423 | 26.064701 | 2.638867 | 0.634065 | 0.202250 | 0.068873 | 28.161551 | 9.131008 | 2 |
25 rows × 30 columns
fig, ax = plt.subplots(figsize = (6,6))
viz_tools.set_aspect(ax, coords = 'map')
ax.plot(data['Lon'], data['Lat'], 'ro',label='data')
ax.plot(data.loc[(data.Lon < -123.5) & (data.Lat < 48.6),['Lon']],
data.loc[(data.Lon < -123.5) & (data.Lat < 48.6),['Lat']],
'bo', label = 'Juan de Fuca')
ax.plot(data.loc[data.Chlorophyll_Extracted>10,['Lon']],data.loc[data.Chlorophyll_Extracted>10,['Lat']],'m>',label='High Chl')
ax.plot(data.loc[data.Si>75,['Lon']],data.loc[data.Si>75,['Lat']],'*',color='y',label='high Si')
grid = nc.Dataset('/data/vdo/MEOPAR/NEMO-forcing/grid/bathymetry_201702.nc')
viz_tools.plot_coastline(ax, grid, coords = 'map')
ax.set_ylim(48, 50.5)
ax.legend()
ax.set_xlim(-125.7, -122.5);
N_s, modmean_s, obsmean_s, bias_s, RMSE_s, WSS_s = et.stats(data.loc[data.Z<15,['N']],data.loc[data.Z<15,['mod_nitrate']])
N_i, modmean_i, obsmean_i, bias_i, RMSE_i, WSS_i = et.stats(data.loc[(data.Z>=15)&(data.Z<22),['N']],data.loc[(data.Z>=15)&(data.Z<22),['mod_nitrate']])
N_d, modmean_d, obsmean_d, bias_d, RMSE_d, WSS_d = et.stats(data.loc[data.Z>=22,['N']],data.loc[data.Z>=22,['mod_nitrate']])
N, modmean, obsmean, bias, RMSE, WSS = et.stats(data.loc[:,['N']],data.loc[:,['mod_nitrate']])
print('Nitrate')
print('z<15 m:')
print(' N: {}\n bias: {}\n RMSE: {}\n WSS: {}'.format(N_s,bias_s,RMSE_s,WSS_s))
print('15 m<=z<22 m:')
print(' N: {}\n bias: {}\n RMSE: {}\n WSS: {}'.format(N_i,bias_i,RMSE_i,WSS_i))
print('z>=22 m:')
print(' N: {}\n bias: {}\n RMSE: {}\n WSS: {}'.format(N_d,bias_d,RMSE_d,WSS_d))
print('all:')
print(' N: {}\n bias: {}\n RMSE: {}\n WSS: {}'.format(N,bias,RMSE,WSS))
Nitrate z<15 m: N: 274 bias: -0.025224428377827124 RMSE: 7.512139238211282 WSS: 0.770628907071865 15 m<=z<22 m: N: 85 bias: 1.5222854277666862 RMSE: 7.229160593627256 WSS: 0.5512098048993181 z>=22 m: N: 502 bias: -1.264475923515409 RMSE: 3.915863594613176 WSS: 0.6653192694426678 all: N: 861 bias: -0.5949873932869814 RMSE: 5.66201140810254 WSS: 0.89491834878871
fig, ax = plt.subplots(figsize = (8,8))
ps=et.varvarPlot(ax,data,'N','mod_nitrate','Z',(15,22),'z','m',('mediumseagreen','darkturquoise','navy'))
ax.legend(handles=ps)
ax.set_xlabel('Obs')
ax.set_ylabel('Model')
ax.set_title('NO$_3$ ($\mu$M)')
ax.set_xlim(0,40)
ax.set_ylim(0,40)
(0, 40)
fig, ax = plt.subplots(1,4,figsize = (24,6))
yy=data.dtUTC[0].year
for axi in ax:
axi.plot(np.arange(0,30),np.arange(0,30),'k-')
ps=et.varvarPlot(ax[0],data.loc[(data.Z<15)&(data.dtUTC<=dt.datetime(yy,4,1)),:],'N','mod_nitrate',cols=('crimson','darkturquoise','navy'))
ax[0].set_title('Feb-Mar')
ii1=(data.Z < 15)&(data.dtUTC<=dt.datetime(yy,5,1))&(data.dtUTC>dt.datetime(yy,4,1))
ps=et.varvarPlot(ax[1],data.loc[ii1,:],'N','mod_nitrate',cols=('crimson','darkturquoise','navy'))
ax[1].set_title('April')
ii2=(data.Z < 15)&(data.dtUTC<=dt.datetime(yy,9,1))&(data.dtUTC>dt.datetime(yy,5,1))
ps=et.varvarPlot(ax[2],data.loc[ii2,:],'N','mod_nitrate',cols=('crimson','darkturquoise','navy'))
ax[2].set_title('May-Jun')
ii3=(data.Z < 15)&(data.dtUTC<=dt.datetime(yy,12,1))&(data.dtUTC>dt.datetime(yy,9,1))
ps=et.varvarPlot(ax[3],data.loc[ii3,:],'N','mod_nitrate',cols=('crimson','darkturquoise','navy'))
ax[3].set_title('Sep-Oct')
#ii4=(data.Z < 15)&(data.dtUTC<=dt.datetime(2016,4,1))&(data.dtUTC>dt.datetime(2016,2,1))
#ps=et.varvarPlot(ax[0],data.loc[ii4,:],obsvar,modvar,cols=('darkturquoise','navy'))
#ii5=(data.Z < 15)&(data.dtUTC<=dt.datetime(2016,5,1))&(data.dtUTC>dt.datetime(2016,4,1))
#ps=et.varvarPlot(ax[1],data.loc[ii5,:],obsvar,modvar,cols=('darkturquoise','navy'))
print('Nitrate, z<15')
print('Feb-Mar:')
et.printstats(data.loc[(data.Z<15)&(data.dtUTC<=dt.datetime(yy,4,1)),:],'N','mod_nitrate')
print('April:')
et.printstats(data.loc[ii1,:],'N','mod_nitrate')
print('May-Jun:')
et.printstats(data.loc[ii2,:],'N','mod_nitrate')
print('Sep-Oct:')
et.printstats(data.loc[ii3,:],'N','mod_nitrate')
fig,ax=plt.subplots(1,1,figsize=(24,1))
plt.plot(data.dtUTC,np.ones(np.shape(data.dtUTC)),'k.')
Nitrate, z<15 Feb-Mar: N: 0 bias: nan RMSE: nan WSS: nan April: N: 127 bias: -1.0808247719664053 RMSE: 7.968982391966732 WSS: 0.7237955278988251 May-Jun: N: 147 bias: 0.8867568208449548 RMSE: 7.093802142883446 WSS: 0.7951388826088835 Sep-Oct: N: 0 bias: nan RMSE: nan WSS: nan
/home/eolson/anaconda3/envs/python36/lib/python3.6/site-packages/numpy/core/fromnumeric.py:2957: RuntimeWarning: Mean of empty slice. out=out, **kwargs) /home/eolson/anaconda3/envs/python36/lib/python3.6/site-packages/numpy/core/_methods.py:80: RuntimeWarning: invalid value encountered in double_scalars ret = ret.dtype.type(ret / rcount) /data/eolson/results/MEOPAR/tools/SalishSeaTools/salishsea_tools/evaltools.py:917: RuntimeWarning: invalid value encountered in double_scalars RMSE=np.sqrt(np.sum((mod-obs)**2)/N) /data/eolson/results/MEOPAR/tools/SalishSeaTools/salishsea_tools/evaltools.py:918: RuntimeWarning: invalid value encountered in double_scalars WSS=1.0-np.sum((mod-obs)**2)/np.sum((np.abs(mod-obsmean)+np.abs(obs-obsmean))**2)
[<matplotlib.lines.Line2D at 0x7f8763d643c8>]
fig, ax = plt.subplots(figsize = (8,8))
viz_tools.set_aspect(ax, coords = 'map')
ax.plot(data['Lon'], data['Lat'], 'ro',label='data')
dJDF=data.loc[(data.Lon<-123.6)&(data.Lat<48.6)]
ax.plot(dJDF['Lon'],dJDF['Lat'],'b.',label='JDF')
dSJGI=data.loc[(data.Lon>=-123.6)&(data.Lat<48.9)]
ax.plot(dSJGI['Lon'],dSJGI['Lat'],'c.',label='SJGI',ms=12)
dSJGI_N=data.loc[(data.Lon>=-123.6)&(data.Lat<48.9)&(data.Lat>48.5)]
ax.plot(dSJGI_N['Lon'],dSJGI_N['Lat'],'.',color='lawngreen',label='SJGI_N',ms=8)
dSJGI_S=data.loc[(data.Lon>=-123.6)&(data.Lat<48.5)]
ax.plot(dSJGI_S['Lon'],dSJGI_S['Lat'],'.',color='seagreen',label='SJGI_S',ms=8)
dSOG=data.loc[(data.Lat>=48.9)&(data.Lon>-124.0)]
ax.plot(dSOG['Lon'],dSOG['Lat'],'y.',label='SOG')
dNSOG=data.loc[(data.Lat>=48.9)&(data.Lon<=-124.0)]
ax.plot(dNSOG['Lon'],dNSOG['Lat'],'m.',label='NSOG')
grid = nc.Dataset('/data/vdo/MEOPAR/NEMO-forcing/grid/bathymetry_201702.nc')
viz_tools.plot_coastline(ax, grid, coords = 'map')
ax.set_ylim(48, 50.5)
ax.legend()
ax.set_xlim(-125.7, -122.5);
fig, ax = plt.subplots(figsize = (8,8))
ps1=et.varvarPlot(ax,dJDF,'N','mod_nitrate',cols=('b','darkturquoise','navy'),lname='SJDF')
ps2=et.varvarPlot(ax,dSJGI_N,'N','mod_nitrate',cols=('lawngreen','darkturquoise','navy'),lname='SJGI_N')
ps3=et.varvarPlot(ax,dSJGI_S,'N','mod_nitrate',cols=('seagreen','darkturquoise','navy'),lname='SJGI_S')
ps4=et.varvarPlot(ax,dSOG,'N','mod_nitrate',cols=('y','darkturquoise','navy'),lname='SOG')
ps5=et.varvarPlot(ax,dNSOG,'N','mod_nitrate',cols=('m','darkturquoise','navy'),lname='NSOGF')
ax.legend(handles=[ps1[0][0],ps2[0][0],ps3[0][0],ps4[0][0],ps5[0][0]])
ax.set_xlabel('Obs')
ax.set_ylabel('Model')
ax.set_title('NO$_3$ ($\mu$M)')
ax.set_xlim(0,40)
ax.set_ylim(0,40)
ax.plot((0,40),(0,40),'-',color='grey',alpha=.5)
[<matplotlib.lines.Line2D at 0x7f8763c034e0>]
fig, ax = plt.subplots(1,2,figsize = (17,8))
cols=('crimson','red','orangered','darkorange','gold','chartreuse','green','lightseagreen','cyan','darkturquoise','royalblue',
'lightskyblue','blue','darkblue','mediumslateblue','blueviolet','darkmagenta','fuchsia','deeppink','pink')
ii0=start_date
for ii in range(0,int((end_date-start_date).days/30)):
iii=(data.dtUTC>=(start_date+dt.timedelta(days=ii*30)))&(data.dtUTC<(start_date+dt.timedelta(days=(ii+1)*30)))
ax[0].plot(data.loc[iii,['mod_nitrate']].values-data.loc[iii,['N']].values, data.loc[iii,['Z']].values,
'.', color = cols[ii],label=str(ii))
ax[1].plot(data.loc[iii,['mod_silicon']].values-data.loc[iii,['Si']].values, data.loc[iii,['Z']].values,
'.', color = cols[ii],label=str(ii))
for axi in (ax[0],ax[1]):
axi.legend(loc=4)
axi.set_ylim(400,0)
axi.set_ylabel('depth (m)')
ax[0].set_xlabel('model - obs N')
ax[0].set_xlim(-15,10)
ax[1].set_xlabel('model - obs Si')
ax[1].set_xlim(-40,20)
ax[0].plot(dSJGI['mod_nitrate']-dSJGI['N'],dSJGI['Z'],'ko',markeredgecolor='k',markerfacecolor='None')
ax[1].plot(dSJGI['mod_silicon']-dSJGI['Si'],dSJGI['Z'],'ko',markeredgecolor='k',markerfacecolor='None')
[<matplotlib.lines.Line2D at 0x7f8763ac7898>]
print('Si')
print('z<15 m:')
et.printstats(data.loc[data.Z<15,:],'Si','mod_silicon')
print('15 m<=z<22 m:')
et.printstats(data.loc[(data.Z>=15)&(data.Z<22),:],'Si','mod_silicon')
print('z>=22 m:')
et.printstats(data.loc[data.Z>=22,:],'Si','mod_silicon')
print('all:')
et.printstats(data,'Si','mod_silicon')
print('obs Si < 50:')
et.printstats(data.loc[data.Si<50,:],'Si','mod_silicon')
Si z<15 m: N: 274 bias: -4.462413137846617 RMSE: 14.255203200939816 WSS: 0.6095533382630076 15 m<=z<22 m: N: 85 bias: 0.512954752304978 RMSE: 10.717745368195413 WSS: 0.6953964909079566 z>=22 m: N: 502 bias: -1.7402726237992283 RMSE: 6.141986145150249 WSS: 0.8695515850185689 all: N: 861 bias: -2.3841079012442066 RMSE: 9.899680580994922 WSS: 0.8595328626774601 obs Si < 50: N: 501 bias: -2.0964356832637563 RMSE: 11.451531382730845 WSS: 0.70493515287917
fig, ax = plt.subplots(figsize = (8,8))
ps=et.varvarPlot(ax,data,'Si','mod_silicon','Z',(15,22),'z','m',('mediumseagreen','darkturquoise','navy'))
ax.legend(handles=ps)
ax.set_xlabel('Obs')
ax.set_ylabel('Model')
ax.set_title('dSi ($\mu$M)')
ax.set_xlim(0,80)
ax.set_ylim(0,80)
(0, 80)
obsvar='Si'; modvar='mod_silicon'
fig, ax = plt.subplots(1,4,figsize = (24,6))
for axi in ax:
axi.plot(np.arange(0,70),np.arange(0,70),'k-')
ps=et.varvarPlot(ax[0],data.loc[(data.Z<15)&(data.dtUTC<=dt.datetime(yy,4,1)),:],obsvar,modvar,cols=('crimson','darkturquoise','navy'))
ax[0].set_title('Feb-Mar')
ii1=(data.Z < 15)&(data.dtUTC<=dt.datetime(yy,5,1))&(data.dtUTC>dt.datetime(yy,4,1))
ps=et.varvarPlot(ax[1],data.loc[ii1,:],obsvar,modvar,cols=('crimson','darkturquoise','navy'))
ax[1].set_title('April')
ii2=(data.Z < 15)&(data.dtUTC<=dt.datetime(yy,9,1))&(data.dtUTC>dt.datetime(yy,5,1))
ps=et.varvarPlot(ax[2],data.loc[ii2,:],obsvar,modvar,cols=('crimson','darkturquoise','navy'))
ax[2].set_title('May-Jun')
ii3=(data.Z < 15)&(data.dtUTC<=dt.datetime(yy,12,1))&(data.dtUTC>dt.datetime(yy,9,1))
ps=et.varvarPlot(ax[3],data.loc[ii3,:],obsvar,modvar,cols=('crimson','darkturquoise','navy'))
ax[3].set_title('Sep-Oct')
print('Silicate, z<15')
print('Feb-Mar:')
et.printstats(data.loc[(data.Z<15)&(data.dtUTC<=dt.datetime(yy,4,1)),:],obsvar,modvar)
print('April:')
et.printstats(data.loc[ii1,:],obsvar,modvar)
print('May-Jun:')
et.printstats(data.loc[ii2,:],obsvar,modvar)
print('Sep-Oct:')
et.printstats(data.loc[ii3,:],obsvar,modvar)
fig,ax=plt.subplots(1,1,figsize=(24,1))
plt.plot(data.dtUTC,np.ones(np.shape(data.dtUTC)),'k.')
Silicate, z<15 Feb-Mar: N: 0 bias: nan RMSE: nan WSS: nan April: N: 127 bias: -4.0894834402039315 RMSE: 16.158707656296002 WSS: 0.6230939151086754 May-Jun: N: 147 bias: -4.784604101116162 RMSE: 12.377172703591246 WSS: 0.5583965552477621 Sep-Oct: N: 0 bias: nan RMSE: nan WSS: nan
/home/eolson/anaconda3/envs/python36/lib/python3.6/site-packages/numpy/core/fromnumeric.py:2957: RuntimeWarning: Mean of empty slice. out=out, **kwargs) /home/eolson/anaconda3/envs/python36/lib/python3.6/site-packages/numpy/core/_methods.py:80: RuntimeWarning: invalid value encountered in double_scalars ret = ret.dtype.type(ret / rcount) /data/eolson/results/MEOPAR/tools/SalishSeaTools/salishsea_tools/evaltools.py:917: RuntimeWarning: invalid value encountered in double_scalars RMSE=np.sqrt(np.sum((mod-obs)**2)/N) /data/eolson/results/MEOPAR/tools/SalishSeaTools/salishsea_tools/evaltools.py:918: RuntimeWarning: invalid value encountered in double_scalars WSS=1.0-np.sum((mod-obs)**2)/np.sum((np.abs(mod-obsmean)+np.abs(obs-obsmean))**2)
[<matplotlib.lines.Line2D at 0x7f8769c526d8>]
fig, ax = plt.subplots(figsize = (8,8))
ps1=et.varvarPlot(ax,dJDF,obsvar,modvar,cols=('b','darkturquoise','navy'),lname='SJDF')
ps2=et.varvarPlot(ax,dSJGI_N,obsvar,modvar,cols=('lawngreen','darkturquoise','navy'),lname='SJGI_N')
ps3=et.varvarPlot(ax,dSJGI_S,obsvar,modvar,cols=('seagreen','darkturquoise','navy'),lname='SJGI_S')
ps4=et.varvarPlot(ax,dSOG,obsvar,modvar,cols=('y','darkturquoise','navy'),lname='SOG')
ps5=et.varvarPlot(ax,dNSOG,obsvar,modvar,cols=('m','darkturquoise','navy'),lname='NSOGF')
ax.legend(handles=[ps1[0][0],ps2[0][0],ps3[0][0],ps4[0][0],ps5[0][0]])
ax.set_xlabel('Obs')
ax.set_ylabel('Model')
ax.set_title('Si ($\mu$M)')
ax.set_xlim(0,80)
ax.set_ylim(0,80)
ax.plot((0,80),(0,80),'-',color='grey',alpha=.5)
[<matplotlib.lines.Line2D at 0x7f8768079a20>]
fig,ax=plt.subplots(1,2,figsize=(16,7))
p1=ax[0].plot(dJDF['N'],dJDF['Si'],'b.',label='SJDF')
p2=ax[0].plot(dSJGI_N['N'],dSJGI_N['Si'],'.',color='lawngreen',label='SJGI_N')
p2=ax[0].plot(dSJGI_S['N'],dSJGI_S['Si'],'.',color='seagreen',label='SJGI_S')
p3=ax[0].plot(dSOG['N'],dSOG['Si'],'y.',label='SOG')
p4=ax[0].plot(dNSOG['N'],dNSOG['Si'],'m.',label='NSOG')
ax[0].set_title('Observed')
ax[0].set_xlabel('N')
ax[0].set_ylabel('Si')
ax[0].set_xlim(0,40)
ax[0].set_ylim(0,85)
ax[0].legend()
p5=ax[1].plot(dJDF['mod_nitrate'],dJDF['mod_silicon'],'b.',label='SJDF')
p6=ax[1].plot(dSJGI_N['mod_nitrate'],dSJGI_N['mod_silicon'],'.',color='lawngreen',label='SJGI_N')
p6=ax[1].plot(dSJGI_S['mod_nitrate'],dSJGI_S['mod_silicon'],'.',color='seagreen',label='SJGI_S')
p7=ax[1].plot(dSOG['mod_nitrate'],dSOG['mod_silicon'],'y.',label='SOG')
p8=ax[1].plot(dNSOG['mod_nitrate'],dNSOG['mod_silicon'],'m.',label='NSOG')
ax[1].set_title('Model')
ax[1].set_xlabel('N')
ax[1].set_ylabel('Si')
ax[1].set_xlim(0,40)
ax[1].set_ylim(0,85)
ax[1].legend()
ax[0].plot(np.arange(0,35),1.3*np.arange(0,35),'k-')
ax[1].plot(np.arange(0,35),1.3*np.arange(0,35),'k-')
[<matplotlib.lines.Line2D at 0x7f87637cd4a8>]
fig,ax=plt.subplots(1,2,figsize=(16,7))
p1=ax[0].plot(dJDF['AbsSal'], dJDF['Si']-1.3*dJDF['N'],'b.',label='SJDF')
p2=ax[0].plot(dSJGI_N['AbsSal'],dSJGI_N['Si']-1.3*dSJGI_N['N'],'.',color='lawngreen',label='SJGI_N')
p2=ax[0].plot(dSJGI_S['AbsSal'],dSJGI_S['Si']-1.3*dSJGI_S['N'],'.',color='seagreen',label='SJGI_S')
p3=ax[0].plot(dSOG['AbsSal'],dSOG['Si']-1.3*dSOG['N'],'y.',label='SOG')
p4=ax[0].plot(dNSOG['AbsSal'],dNSOG['Si']-1.3*dNSOG['N'],'m.',label='NSOG')
ax[0].set_title('Observed')
ax[0].set_xlabel('S')
ax[0].set_ylabel('Si-1.3N')
ax[0].set_xlim(10,35)
ax[0].set_ylim(0,45)
ax[0].legend()
p5=ax[1].plot(dJDF['mod_vosaline'],dJDF['mod_silicon']-1.3*dJDF['mod_nitrate'],'b.',label='SJDF')
p6=ax[1].plot(dSJGI_N['mod_vosaline'],dSJGI_N['mod_silicon']-1.3*dSJGI_N['mod_nitrate'],'.',color='lawngreen',label='SJGI_N')
p6=ax[1].plot(dSJGI_S['mod_vosaline'],dSJGI_S['mod_silicon']-1.3*dSJGI_S['mod_nitrate'],'.',color='seagreen',label='SJGI_S')
p7=ax[1].plot(dSOG['mod_vosaline'],dSOG['mod_silicon']-1.3*dSOG['mod_nitrate'],'y.',label='SOG')
p8=ax[1].plot(dNSOG['mod_vosaline'],dNSOG['mod_silicon']-1.3*dNSOG['mod_nitrate'],'m.',label='NSOG')
ax[1].set_title('Model')
ax[1].set_xlabel('S')
ax[1].set_ylabel('Si-1.3N')
ax[1].set_xlim(10,35)
ax[1].set_ylim(0,45)
ax[1].legend()
<matplotlib.legend.Legend at 0x7f876367aba8>
data.loc[data.Si>65,['Month','Lat','Lon','Z','Si']]
Month | Lat | Lon | Z | Si | |
---|---|---|---|---|---|
146 | 4.0 | 50.066000 | -124.713333 | 29.6414 | 65.3 |
153 | 4.0 | 50.079833 | -124.714167 | 19.9266 | 65.3 |
154 | 4.0 | 50.079833 | -124.714167 | 29.7405 | 68.0 |
173 | 4.0 | 50.072333 | -124.812333 | 125.079 | 65.5 |
174 | 4.0 | 50.072333 | -124.812333 | 149.65 | 66.1 |
175 | 4.0 | 50.072333 | -124.812333 | 200.07 | 71.4 |
176 | 4.0 | 50.072333 | -124.812333 | 220.77 | 69.4 |
177 | 4.0 | 50.072333 | -124.812333 | 223.84 | 69.4 |
178 | 4.0 | 50.072333 | -124.812333 | 227.801 | 69.6 |
204 | 4.0 | 50.073167 | -125.014167 | 59.9722 | 66.4 |
205 | 4.0 | 50.073167 | -125.014167 | 73.1539 | 68.1 |
206 | 4.0 | 50.073167 | -125.014167 | 74.5413 | 69.4 |
207 | 4.0 | 50.073167 | -125.014167 | 77.6136 | 67.1 |
214 | 4.0 | 50.053833 | -125.011667 | 87.9204 | 65.5 |
215 | 4.0 | 50.053833 | -125.011667 | 89.9024 | 65.6 |
216 | 4.0 | 50.053833 | -125.011667 | 91.8843 | 66.2 |
326 | 4.0 | 49.029833 | -123.436167 | 296.546 | 69.1 |
327 | 4.0 | 49.029833 | -123.436167 | 311.199 | 69.8 |
341 | 4.0 | 49.402167 | -124.155500 | 248.216 | 67.8 |
342 | 4.0 | 49.402167 | -124.155500 | 268.119 | 69.8 |
357 | 4.0 | 49.443333 | -124.338500 | 247.918 | 65.6 |
358 | 4.0 | 49.443333 | -124.338500 | 297.327 | 69.5 |
359 | 4.0 | 49.443333 | -124.338500 | 314.751 | 73.7 |
385 | 4.0 | 49.592667 | -124.638167 | 164.121 | 70.2 |
402 | 4.0 | 49.726833 | -124.680167 | 347.012 | 71.1 |
418 | 4.0 | 49.883333 | -124.993500 | 308.204 | 66.5 |
446 | 4.0 | 49.318667 | -123.800167 | 339.601 | 68.0 |
462 | 4.0 | 49.163667 | -123.554667 | 297.235 | 66.4 |
463 | 4.0 | 49.163667 | -123.554667 | 351.484 | 74.8 |
464 | 4.0 | 49.163667 | -123.554667 | 367.518 | 65.9 |
734 | 6.0 | 49.318500 | -123.799500 | 297.528 | 65.6 |
749 | 6.0 | 49.401500 | -124.154833 | 247.82 | 67.5 |
750 | 6.0 | 49.401500 | -124.154833 | 270.1 | 69.4 |
764 | 6.0 | 49.442833 | -124.336833 | 247.225 | 72.0 |
765 | 6.0 | 49.442833 | -124.336833 | 296.139 | 72.1 |
766 | 6.0 | 49.442833 | -124.336833 | 316.137 | 70.0 |
779 | 6.0 | 49.510333 | -124.462333 | 188.788 | 65.5 |
790 | 7.0 | 49.591000 | -124.638333 | 148.765 | 69.6 |
791 | 7.0 | 49.591000 | -124.638333 | 162.932 | 74.2 |
822 | 7.0 | 49.883500 | -124.993500 | 309.788 | 65.9 |
867 | 7.0 | 49.988667 | -124.699167 | 46.7901 | 78.6 |
868 | 7.0 | 49.988667 | -124.699167 | 48.6734 | 76.8 |
869 | 7.0 | 49.988667 | -124.699167 | 50.2593 | 74.5 |
887 | 7.0 | 50.004667 | -124.713333 | 66.514 | 82.3 |
888 | 7.0 | 50.004667 | -124.713333 | 68.4962 | 76.8 |
889 | 7.0 | 50.004667 | -124.713333 | 70.3793 | 77.4 |
897 | 7.0 | 50.017667 | -124.721167 | 74.6408 | 84.8 |
898 | 7.0 | 50.017667 | -124.721167 | 84.353 | 94.7 |
899 | 7.0 | 50.017667 | -124.721167 | 86.236 | 96.2 |
900 | 7.0 | 50.017667 | -124.721167 | 88.0198 | 99.1 |
908 | 7.0 | 50.032833 | -124.729667 | 73.1541 | 85.7 |
909 | 7.0 | 50.032833 | -124.729667 | 75.0371 | 87.3 |
910 | 7.0 | 50.032833 | -124.729667 | 77.2175 | 88.1 |
1036 | 7.0 | 50.057000 | -124.718167 | 60.4679 | 66.4 |
1037 | 7.0 | 50.057000 | -124.718167 | 62.7475 | 65.8 |
1038 | 7.0 | 50.057000 | -124.718167 | 64.5315 | 69.6 |
1066 | 7.0 | 50.073167 | -125.014167 | 72.1628 | 70.8 |
1067 | 7.0 | 50.073167 | -125.014167 | 74.4422 | 67.5 |
1068 | 7.0 | 50.073167 | -125.014167 | 76.3252 | 69.9 |
data['l10_obsChl']=np.log10(data['Chlorophyll_Extracted']+0.01)
data['l10_modChl']=np.log10(2*(data['mod_diatoms']+data['mod_ciliates']+data['mod_flagellates'])+0.01)
data['mod_Chl']=2*(data['mod_diatoms']+data['mod_ciliates']+data['mod_flagellates'])
print('log10[Chl+0.01]')
print('z<15 m:')
et.printstats(data.loc[data.Z<15,:],'l10_obsChl','l10_modChl')
print('z>=15 m:')
et.printstats(data.loc[data.Z>=15,:],'l10_obsChl','l10_modChl')
print('all:')
et.printstats(data,'l10_obsChl','l10_modChl')
print('\n')
print('Chl')
print('z<15 m:')
et.printstats(data.loc[data.Z<15,:],'Chlorophyll_Extracted','mod_Chl')
print('z>=15 m:')
et.printstats(data.loc[data.Z>=15,:],'Chlorophyll_Extracted','mod_Chl')
print('all:')
et.printstats(data,'Chlorophyll_Extracted','mod_Chl')
log10[Chl+0.01] z<15 m: N: 79 bias: -0.23284336872740594 RMSE: 0.6253349982353618 WSS: 0.42095683676810636 z>=15 m: N: 40 bias: -0.2838533573128714 RMSE: 0.6217196229751139 WSS: 0.4015041772473762 all: N: 119 bias: -0.2499895833779826 RMSE: 0.6241220827375371 WSS: 0.47819830043915124 Chl z<15 m: N: 79 bias: -3.176542105966422 RMSE: 7.062831816243247 WSS: 0.40052935532029643 z>=15 m: N: 40 bias: -2.61487728526257 RMSE: 5.422735961643445 WSS: 0.396611492547564 all: N: 119 bias: -2.987747208250842 RMSE: 6.557468306491702 WSS: 0.4068955844426332
fig, ax = plt.subplots(1,2,figsize = (14,6))
ax[0].plot(np.arange(-.6,1.6,.1),np.arange(-.6,1.6,.1),'k-')
ps=et.varvarPlot(ax[0],data,'l10_obsChl','l10_modChl','Z',(5,10,15,20,25),'z','m',('crimson','darkorange','lime','mediumseagreen','darkturquoise','navy'))
ax[0].legend(handles=ps)
ax[0].set_xlabel('Obs')
ax[0].set_ylabel('Model')
ax[0].set_title('log10[Chl ($\mu$g/L)+0.01]')
ax[1].plot(np.arange(0,35),np.arange(0,35),'k-')
ps=et.varvarPlot(ax[1],data,'Chlorophyll_Extracted','mod_Chl','Z',(5,10,15,20,25),'z','m',('crimson','darkorange','lime','mediumseagreen','darkturquoise','navy'))
ax[1].legend(handles=ps)
ax[1].set_xlabel('Obs')
ax[1].set_ylabel('Model')
ax[1].set_title('Chl ($\mu$g/L)')
<matplotlib.text.Text at 0x7f8763e25a20>
ii=(data.Lat>49.8)&(data.Lat<50.2)&(data.Lon>-124.8)&(data.Lon<-124.5)&(data.Z<10)
#,['Month','Z','mod_Chl','Chlorophyll_Extracted','mod_nitrate','N','mod_silicon','Si']]
plt.scatter(data.loc[ii,['N']],data.loc[ii,['mod_nitrate']],c=data.loc[ii,['Month']],vmin=1,vmax=11)
plt.colorbar()
plt.xlim(0,30)
plt.ylim(0,30)
(0, 30)
plt.scatter(data.loc[~ii,['N']],data.loc[~ii,['mod_nitrate']],c=data.loc[~ii,['Month']],vmin=1,vmax=11)
plt.colorbar()
plt.xlim(0,30)
plt.ylim(0,30)
(0, 30)
plt.scatter(data.loc[ii,['Si']],data.loc[ii,['mod_silicon']],c=data.loc[ii,['Month']])
plt.colorbar()
plt.xlim(0,60)
plt.ylim(0,60)
(0, 60)
fspin=nc.Dataset('/results/SalishSea/spinup.201905/02mar13/SalishSea_1h_20130302_20130302_ptrc_T.nc')
ftest=nc.Dataset('/data/eolson/results/MEOPAR/SS36runs/CedarRuns/t15r15LinbfSi/SalishSea_1h_20150220_20150410_ptrc_T_20150302-20150311.nc')
fig,ax=plt.subplots(1,2,figsize=(10,8))
ax[0].pcolormesh(fspin.variables['diatoms'][0,0,:,:])
m=ax[1].pcolormesh(ftest.variables['diatoms'][0,0,:,:])
plt.colorbar(m)
<matplotlib.colorbar.Colorbar at 0x7f876329c7b8>
plt.pcolormesh(fspin.variables['diatoms'][0,0,:,:]-ftest.variables['diatoms'][0,0,:,:])
plt.colorbar()
<matplotlib.colorbar.Colorbar at 0x7f87633b17f0>
plt.pcolormesh(fspin.variables['microzooplankton'][0,0,:,:]-ftest.variables['microzooplankton'][0,0,:,:])
plt.colorbar()
<matplotlib.colorbar.Colorbar at 0x7f8763388898>
plt.pcolormesh(fspin.variables['microzooplankton'][0,0,:,:])
plt.colorbar()
<matplotlib.colorbar.Colorbar at 0x7f87633d5550>
fig, ax = plt.subplots(1,2,figsize = (17,8))
cols=('crimson','red','orangered','darkorange','gold','chartreuse','green','lightseagreen','cyan','darkturquoise','royalblue',
'lightskyblue','blue','darkblue','mediumslateblue','blueviolet','darkmagenta','fuchsia','deeppink','pink')
ii0=start_date
for ii in range(0,int((end_date-start_date).days/30)):
iii=(data.dtUTC>=(start_date+dt.timedelta(days=ii*30)))&(data.dtUTC<(start_date+dt.timedelta(days=(ii+1)*30)))
ax[0].plot(data.loc[iii,['mod_nitrate']].values-data.loc[iii,['N']].values, data.loc[iii,['Z']].values,
'.', color = cols[ii],label=str(ii))
ax[1].plot(data.loc[iii,['mod_silicon']].values-data.loc[iii,['Si']].values, data.loc[iii,['Z']].values,
'.', color = cols[ii],label=str(ii))
for axi in (ax[0],ax[1]):
axi.legend(loc=4)
axi.set_ylim(400,0)
axi.set_ylabel('depth (m)')
ax[0].set_xlabel('model - obs N')
ax[0].set_xlim(-15,10)
ax[1].set_xlabel('model - obs Si')
ax[1].set_xlim(-40,20)
ax[0].plot(dJDF['mod_nitrate']-dJDF['N'],dJDF['Z'],'ko',markeredgecolor='k',markerfacecolor='None')
ax[1].plot(dJDF['mod_silicon']-dJDF['Si'],dJDF['Z'],'ko',markeredgecolor='k',markerfacecolor='None')
[<matplotlib.lines.Line2D at 0x7f8762e659b0>]
fig, ax = plt.subplots(1,2,figsize = (17,8))
cols=('crimson','red','orangered','darkorange','gold','chartreuse','green','lightseagreen','cyan','darkturquoise','royalblue',
'lightskyblue','blue','darkblue','mediumslateblue','blueviolet','darkmagenta','fuchsia','deeppink','pink')
ii0=start_date
for ii in range(0,int((end_date-start_date).days/30)):
iii=(data.dtUTC>=(start_date+dt.timedelta(days=ii*30)))&(data.dtUTC<(start_date+dt.timedelta(days=(ii+1)*30)))
ax[0].plot(data.loc[iii,['N']].values, data.loc[iii,['Z']].values,
'.', color = cols[ii],label=str(ii))
ax[1].plot(data.loc[iii,['Si']].values, data.loc[iii,['Z']].values,
'.', color = cols[ii],label=str(ii))
for axi in (ax[0],ax[1]):
axi.legend(loc=4)
axi.set_ylim(400,0)
axi.set_ylabel('depth (m)')
ax[0].set_xlabel('obs N')
#ax[0].set_xlim(-15,10)
ax[1].set_xlabel('obs Si')
#ax[1].set_xlim(-40,20)
ax[0].plot(dJDF['N'],dJDF['Z'],'ko',markeredgecolor='k',markerfacecolor='None')
ax[1].plot(dJDF['Si'],dJDF['Z'],'ko',markeredgecolor='k',markerfacecolor='None')
[<matplotlib.lines.Line2D at 0x7f8762e7a0b8>]
fig, ax = plt.subplots(1,2,figsize = (17,8))
cols=('crimson','red','orangered','darkorange','gold','chartreuse','green','lightseagreen','cyan','darkturquoise','royalblue',
'lightskyblue','blue','darkblue','mediumslateblue','blueviolet','darkmagenta','fuchsia','deeppink','pink')
ii0=start_date
for ii in range(0,int((end_date-start_date).days/30)):
iii=(data.dtUTC>=(start_date+dt.timedelta(days=ii*30)))&(data.dtUTC<(start_date+dt.timedelta(days=(ii+1)*30)))
ax[0].plot(data.loc[iii,['mod_nitrate']].values, data.loc[iii,['Z']].values,
'.', color = cols[ii],label=str(ii))
ax[1].plot(data.loc[iii,['mod_silicon']].values, data.loc[iii,['Z']].values,
'.', color = cols[ii],label=str(ii))
for axi in (ax[0],ax[1]):
axi.legend(loc=4)
axi.set_ylim(400,0)
axi.set_ylabel('depth (m)')
ax[0].set_xlabel('model N')
ax[1].set_xlabel('model Si')
ax[0].plot(dJDF['mod_nitrate'],dJDF['Z'],'ko',markeredgecolor='k',markerfacecolor='None')
ax[1].plot(dJDF['mod_silicon'],dJDF['Z'],'ko',markeredgecolor='k',markerfacecolor='None')
[<matplotlib.lines.Line2D at 0x7f8768354588>]
fig, ax = plt.subplots(1,2,figsize = (17,8))
cols=('crimson','red','orangered','darkorange','gold','chartreuse','green','lightseagreen','cyan','darkturquoise','royalblue',
'lightskyblue','blue','darkblue','mediumslateblue','blueviolet','darkmagenta','fuchsia','deeppink','pink')
ii0=start_date
for ii in range(0,int((end_date-start_date).days/30)):
iii=(data.dtUTC>=(start_date+dt.timedelta(days=ii*30)))&(data.dtUTC<(start_date+dt.timedelta(days=(ii+1)*30)))
ax[0].plot(data.loc[iii,['mod_votemper']].values-data.loc[iii,['ConsT']].values, data.loc[iii,['Z']].values,
'.', color = cols[ii],label=str(ii))
ax[1].plot(data.loc[iii,['mod_vosaline']].values-data.loc[iii,['AbsSal']].values, data.loc[iii,['Z']].values,
'.', color = cols[ii],label=str(ii))
for axi in (ax[0],ax[1]):
axi.legend(loc=4)
axi.set_ylim(400,0)
axi.set_ylabel('depth (m)')
ax[0].set_xlabel('model - obs T')
ax[0].set_xlim(-15,10)
ax[1].set_xlabel('model - obs S')
ax[1].set_xlim(-40,20)
ax[0].plot(dJDF['mod_votemper']-dJDF['ConsT'],dJDF['Z'],'ko',markeredgecolor='k',markerfacecolor='None')
ax[1].plot(dJDF['mod_vosaline']-dJDF['AbsSal'],dJDF['Z'],'ko',markeredgecolor='k',markerfacecolor='None')
[<matplotlib.lines.Line2D at 0x7f8762b14b38>]
fig, ax = plt.subplots(1,2,figsize = (17,8))
cols=('crimson','red','orangered','darkorange','gold','chartreuse','green','lightseagreen','cyan','darkturquoise','royalblue',
'lightskyblue','blue','darkblue','mediumslateblue','blueviolet','darkmagenta','fuchsia','deeppink','pink')
ii0=start_date
for ii in range(0,int((end_date-start_date).days/30)):
iii=(data.dtUTC>=(start_date+dt.timedelta(days=ii*30)))&(data.dtUTC<(start_date+dt.timedelta(days=(ii+1)*30)))
ax[0].plot(data.loc[iii,['ConsT']].values, data.loc[iii,['Z']].values,
'.', color = cols[ii],label=str(ii))
ax[1].plot(data.loc[iii,['AbsSal']].values, data.loc[iii,['Z']].values,
'.', color = cols[ii],label=str(ii))
for axi in (ax[0],ax[1]):
axi.legend(loc=4)
axi.set_ylim(400,0)
axi.set_ylabel('depth (m)')
ax[0].set_xlabel('obs T')
ax[0].set_xlim(0,23)
ax[1].set_xlabel('obs S')
ax[1].set_xlim(0,35)
ax[0].plot(dJDF['ConsT'],dJDF['Z'],'ko',markeredgecolor='k',markerfacecolor='None')
ax[1].plot(dJDF['AbsSal'],dJDF['Z'],'ko',markeredgecolor='k',markerfacecolor='None')
[<matplotlib.lines.Line2D at 0x7f8763854c18>]
fig, ax = plt.subplots(1,2,figsize = (17,8))
cols=('crimson','red','orangered','darkorange','gold','chartreuse','green','lightseagreen','cyan','darkturquoise','royalblue',
'lightskyblue','blue','darkblue','mediumslateblue','blueviolet','darkmagenta','fuchsia','deeppink','pink')
ii0=start_date
for ii in range(0,int((end_date-start_date).days/30)):
iii=(data.dtUTC>=(start_date+dt.timedelta(days=ii*30)))&(data.dtUTC<(start_date+dt.timedelta(days=(ii+1)*30)))
ax[0].plot(data.loc[iii,['mod_votemper']].values, data.loc[iii,['Z']].values,
'.', color = cols[ii],label=str(ii))
ax[1].plot(data.loc[iii,['mod_vosaline']].values, data.loc[iii,['Z']].values,
'.', color = cols[ii],label=str(ii))
for axi in (ax[0],ax[1]):
axi.legend(loc=4)
axi.set_ylim(400,0)
axi.set_ylabel('depth (m)')
ax[0].set_xlabel('model T')
ax[0].set_xlim(0,23)
ax[1].set_xlabel('model S')
ax[1].set_xlim(0,35)
ax[0].plot(dJDF['mod_votemper'],dJDF['Z'],'ko',markeredgecolor='k',markerfacecolor='None')
ax[1].plot(dJDF['mod_vosaline'],dJDF['Z'],'ko',markeredgecolor='k',markerfacecolor='None')
[<matplotlib.lines.Line2D at 0x7f8762b3aeb8>]