#!/usr/bin/env python # coding: utf-8 # ## DFO Nutrient Comparison # In[1]: 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 get_ipython().run_line_magic('matplotlib', 'inline') # In[2]: 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() # In[3]: plt.hist(df1.Month) # In[4]: data=et.matchData(df1,filemap, fdict, start_date, end_date, namfmt, PATH, flen) # In[5]: data.head() # In[6]: data.loc[data.Chlorophyll_Extracted>10] # In[7]: 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); # # Nitrate # In[8]: 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)) # In[9]: 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) # In[10]: 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.') # In[11]: 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); # In[12]: 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) # In[13]: 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') # # Silicate # In[14]: 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') # In[15]: 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) # In[16]: 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.') # In[17]: 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) # # Ratios # In[18]: 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-') # In[19]: 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() # In[20]: data.loc[data.Si>65,['Month','Lat','Lon','Z','Si']] # In[ ]: # # Chlorophyll # In[21]: 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']) # In[22]: 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') # In[23]: 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)') # In[24]: 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) # In[25]: 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) # In[26]: 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) # In[27]: fspin=nc.Dataset('/results/SalishSea/spinup.201905/02mar13/SalishSea_1h_20130302_20130302_ptrc_T.nc') # In[28]: ftest=nc.Dataset('/data/eolson/results/MEOPAR/SS36runs/CedarRuns/t15r15LinbfSi/SalishSea_1h_20150220_20150410_ptrc_T_20150302-20150311.nc') # In[29]: 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) # In[30]: plt.pcolormesh(fspin.variables['diatoms'][0,0,:,:]-ftest.variables['diatoms'][0,0,:,:]) plt.colorbar() # In[31]: plt.pcolormesh(fspin.variables['microzooplankton'][0,0,:,:]-ftest.variables['microzooplankton'][0,0,:,:]) plt.colorbar() # In[32]: plt.pcolormesh(fspin.variables['microzooplankton'][0,0,:,:]) plt.colorbar() # In[33]: 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') # In[34]: 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') # In[35]: 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') # In[36]: 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') # In[37]: 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') # In[38]: 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') # In[ ]: # In[ ]: