Temperature, Salinity, and StratificationΒΆ
Now that we have learned the basic thermodynamics of seawater and understood how temperature and salinity combine to determine the stratifcation of water columns, we are ready to examine the global patterns of temperature, salinity and stratification. These patterns are fascinating and reveal much about the underlying ocean circulation. We will also learn how to identify distinct water masses both in geographic space and in temperature / salinity coordinates.
import xarray as xr
from matplotlib import pyplot as plt
import hvplot.xarray
import gsw
import numpy as np
import holoviews as hv
from IPython.display import Image
hv.extension('bokeh')
plt.rcParams['figure.figsize'] = (12,7)
Data Source: World Ocean AtlasΒΆ
We will use data from the NOAA World Ocean Atlas, stored on the IRI Data Library at http://iridl.ldeo.columbia.edu/SOURCES/.NOAA/.NODC/.WOA09/.
World Ocean Atlas 2009 (WOA09) is a set of objectively analyzed (1Β° grid) climatological fields of in situ temperature, salinity, dissolved oxygen, Apparent Oxygen Utilization (AOU), percent oxygen saturation, phosphate, silicate, and nitrate at standard depth levels for annual, seasonal, and monthly compositing periods for the World Ocean. It also includes associated statistical fields of observed oceanographic profile data interpolated to standard depth levels on both 1Β° and 5Β° grids .
# basin masks
woa_mask = xr.open_dataset('http://iridl.ldeo.columbia.edu/SOURCES/.NOAA/.NODC/.WOA09/'
'.Masks/.basin/dods/').rename({'X':'lon', 'Y':'lat', 'Z': 'depth'})
basin_names = woa_mask.basin.attrs['CLIST'].split('\n')
basins_main = { n: basin_names[n-1] for n in [1,2,3,10] }
basins_marginal = { n: basin_names[n-1] for n in [4,5,6,7,11] }
woa_mask
<xarray.Dataset>
Dimensions: (depth: 33, lat: 180, lon: 360)
Coordinates:
* depth (depth) float32 0.0 10.0 20.0 30.0 ... 4e+03 4.5e+03 5e+03 5.5e+03
* lon (lon) float32 0.5 1.5 2.5 3.5 4.5 ... 355.5 356.5 357.5 358.5 359.5
* lat (lat) float32 -89.5 -88.5 -87.5 -86.5 -85.5 ... 86.5 87.5 88.5 89.5
Data variables:
basin (depth, lat, lon) float32 ...
Attributes:
Conventions: IRIDL- depth: 33
- lat: 180
- lon: 360
- depth(depth)float320.0 10.0 20.0 ... 5e+03 5.5e+03
- gridtype :
- 0
- units :
- m
array([ 0., 10., 20., 30., 50., 75., 100., 125., 150., 200., 250., 300., 400., 500., 600., 700., 800., 900., 1000., 1100., 1200., 1300., 1400., 1500., 1750., 2000., 2500., 3000., 3500., 4000., 4500., 5000., 5500.], dtype=float32) - lon(lon)float320.5 1.5 2.5 ... 357.5 358.5 359.5
- standard_name :
- longitude
- pointwidth :
- 1.0
- gridtype :
- 1
- units :
- degree_east
array([ 0.5, 1.5, 2.5, ..., 357.5, 358.5, 359.5], dtype=float32)
- lat(lat)float32-89.5 -88.5 -87.5 ... 88.5 89.5
- standard_name :
- latitude
- pointwidth :
- 1.0
- gridtype :
- 0
- units :
- degree_north
array([-89.5, -88.5, -87.5, -86.5, -85.5, -84.5, -83.5, -82.5, -81.5, -80.5, -79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5], dtype=float32)
- basin(depth, lat, lon)float32...
- long_name :
- basin code
- units :
- ids
- scale_max :
- 58
- CLIST :
- Atlantic Ocean Pacific Ocean Indian Ocean Mediterranean Sea Baltic Sea Black Sea Red Sea Persian Gulf Hudson Bay Southern Ocean Arctic Ocean Sea of Japan Kara Sea Sulu Sea Baffin Bay East Mediterranean West Mediterranean Sea of Okhotsk Banda Sea Caribbean Sea Andaman Basin North Caribbean Gulf of Mexico Beaufort Sea South China Sea Barents Sea Celebes Sea Aleutian Basin Fiji Basin North American Basin West European Basin Southeast Indian Basin Coral Sea East Indian Basin Central Indian Basin Southwest Atlantic Basin Southeast Atlantic Basin Southeast Pacific Basin Guatemala Basin East Caroline Basin Marianas Basin Philippine Sea Arabian Sea Chile Basin Somali Basin Mascarene Basin Crozet Basin Guinea Basin Brazil Basin Argentine Basin Tasman Sea Atlantic Indian Basin Caspian Sea Sulu Sea II Venezuela Basin Bay of Bengal Java Sea East Indian Atlantic Basin
- valid_min :
- 1
- valid_max :
- 58
- scale_min :
- 1
[2138400 values with dtype=float32]
- Conventions :
- IRIDL
# actual data
url_base = 'http://iridl.ldeo.columbia.edu/SOURCES/.NOAA/.NODC/.WOA09/.Grid-1x1/.Annual'
url_temp = url_base + '/.temperature/.t_an/dods'
url_salt = url_base + '/.salinity/.s_an/dods '
woa_temp = xr.open_dataset(url_temp)
woa_temp_nobs = xr.open_dataarray(url_base + '/.temperature/.t_dd/dods')
woa_salt = xr.open_dataset(url_salt)
woa = xr.merge([woa_temp, woa_salt, woa_temp_nobs, woa_mask]).isel(time=0)
woa.load()
<xarray.Dataset>
Dimensions: (depth: 33, lat: 180, lon: 360)
Coordinates:
* lon (lon) float32 0.5 1.5 2.5 3.5 4.5 ... 355.5 356.5 357.5 358.5 359.5
* depth (depth) float32 0.0 10.0 20.0 30.0 ... 4e+03 4.5e+03 5e+03 5.5e+03
* lat (lat) float32 -89.5 -88.5 -87.5 -86.5 -85.5 ... 86.5 87.5 88.5 89.5
time datetime64[ns] 2008-01-01
Data variables:
t_an (depth, lat, lon) float32 nan nan nan nan nan ... nan nan nan nan
s_an (depth, lat, lon) float32 nan nan nan nan nan ... nan nan nan nan
t_dd (depth, lat, lon) float64 nan nan nan nan nan ... nan nan nan nan
basin (depth, lat, lon) float32 nan nan nan nan nan ... nan nan nan nan
Attributes:
Conventions: IRIDL- depth: 33
- lat: 180
- lon: 360
- lon(lon)float320.5 1.5 2.5 ... 357.5 358.5 359.5
- long_name :
- longitude
- pointwidth :
- 1.0
- bounds :
- lon_bnds
- axis :
- X
- modulus :
- 360.0
- description :
- Longitude Range: 0 to 360 degrees with 0 at Greenwich Meridian and increasing along the east.
- standard_name :
- longitude
- gridtype :
- 1
- units :
- degree_east
array([ 0.5, 1.5, 2.5, ..., 357.5, 358.5, 359.5], dtype=float32)
- depth(depth)float320.0 10.0 20.0 ... 5e+03 5.5e+03
- standard_name :
- depth
- long_name :
- depth
- positive :
- down
- axis :
- Z
- description :
- Standard Depth Levels
- gridtype :
- 0
- units :
- m
array([ 0., 10., 20., 30., 50., 75., 100., 125., 150., 200., 250., 300., 400., 500., 600., 700., 800., 900., 1000., 1100., 1200., 1300., 1400., 1500., 1750., 2000., 2500., 3000., 3500., 4000., 4500., 5000., 5500.], dtype=float32) - lat(lat)float32-89.5 -88.5 -87.5 ... 88.5 89.5
- long_name :
- latitude
- pointwidth :
- 1.0
- bounds :
- lat_bnds
- axis :
- Y
- description :
- Latitude Range: -90 to 90 degrees with 0 at the Equator and increasing along the north.
- standard_name :
- latitude
- gridtype :
- 0
- units :
- degree_north
array([-89.5, -88.5, -87.5, -86.5, -85.5, -84.5, -83.5, -82.5, -81.5, -80.5, -79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5], dtype=float32) - time()datetime64[ns]2008-01-01
- pointwidth :
- 0
- gridtype :
- 0
array('2008-01-01T00:00:00.000000000', dtype='datetime64[ns]')
- t_an(depth, lat, lon)float32nan nan nan nan ... nan nan nan nan
- grid_mapping :
- crs
- standard_name :
- sea_water_temperature
- cell_methods :
- time:mean within years time:mean over years
- long_name :
- Sea Water Temperature
- units :
- degrees Celsius
- description :
- The objectively interpolated mean field for Sea Water Temperature for annual time period at each one-degree square at each standard depth.
array([[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [-1.6027, -1.583 , -1.5641, ..., -1.6467, -1.6357, -1.6209], [-1.6168, -1.605 , -1.5937, ..., -1.6421, -1.6363, -1.6276], [-1.6125, -1.6064, -1.6008, ..., -1.6203, -1.6188, -1.6154]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [-1.8245, -1.8032, -1.7863, ..., -1.855 , -1.8493, -1.8386], [-1.8001, -1.7884, -1.7767, ..., -1.8201, -1.8158, -1.8093], [-1.7704, -1.7638, -1.756 , ..., -1.7801, -1.7798, -1.7754]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., ... [-0.6856, -0.6856, -0.6856, ..., -0.6856, -0.6856, -0.6856], [-0.6856, -0.6856, -0.6856, ..., -0.6856, -0.6856, -0.6856], [-0.6856, -0.6856, -0.6856, ..., -0.6856, -0.6856, -0.6856]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], dtype=float32) - s_an(depth, lat, lon)float32nan nan nan nan ... nan nan nan nan
- standard_name :
- sea_water_salinity
- cell_methods :
- time:mean within years time:mean over years
- salinity_scale :
- Practical Salinity Scale(PSS-78)
- long_name :
- Sea Water Salinity
- units :
- unitless
- grid_mapping :
- crs
- description :
- The objectively interpolated mean field for Sea Water Salinity for annual time period at each one-degree square at each standard depth.
array([[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [31.8196, 31.8635, 31.884 , ..., 31.6614, 31.7311, 31.7661], [31.5965, 31.6369, 31.6655, ..., 31.5004, 31.5093, 31.5742], [31.395 , 31.4156, 31.4342, ..., 31.3159, 31.3376, 31.3604]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [32.4103, 32.4583, 32.4824, ..., 32.2429, 32.2778, 32.3209], [32.2732, 32.3243, 32.3533, ..., 32.1821, 32.1926, 32.259 ], [32.1368, 32.142 , 32.1698, ..., 32.0648, 32.0723, 32.105 ]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., ... [34.9423, 34.9423, 34.9423, ..., 34.9423, 34.9423, 34.9423], [34.9423, 34.9423, 34.9423, ..., 34.9423, 34.9423, 34.9423], [34.9423, 34.9423, 34.9423, ..., 34.9423, 34.9423, 34.9423]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], dtype=float32) - t_dd(depth, lat, lon)float64nan nan nan nan ... nan nan nan nan
- long_name :
- Number of Observations
- units :
- unitless
- grid_mapping :
- crs
- description :
- The number of observations of Sea Water Temperature in each one-degree square of the World Ocean at each standard depth level
array([[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [ 0., 0., 0., ..., 0., 0., 0.], [ 0., 0., 0., ..., 2., 2., 1.], [ 1., 1., 0., ..., 0., 0., 0.]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [ 1., 2., 2., ..., 0., 0., 0.], [ 1., 0., 0., ..., 2., 2., 2.], [ 1., 1., 0., ..., 0., 0., 0.]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., ... ..., [ 0., 0., 0., ..., 0., 0., 0.], [ 0., 0., 0., ..., 0., 0., 0.], [ 0., 0., 0., ..., 0., 0., 0.]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]) - basin(depth, lat, lon)float32nan nan nan nan ... nan nan nan nan
- long_name :
- basin code
- units :
- ids
- scale_max :
- 58
- CLIST :
- Atlantic Ocean Pacific Ocean Indian Ocean Mediterranean Sea Baltic Sea Black Sea Red Sea Persian Gulf Hudson Bay Southern Ocean Arctic Ocean Sea of Japan Kara Sea Sulu Sea Baffin Bay East Mediterranean West Mediterranean Sea of Okhotsk Banda Sea Caribbean Sea Andaman Basin North Caribbean Gulf of Mexico Beaufort Sea South China Sea Barents Sea Celebes Sea Aleutian Basin Fiji Basin North American Basin West European Basin Southeast Indian Basin Coral Sea East Indian Basin Central Indian Basin Southwest Atlantic Basin Southeast Atlantic Basin Southeast Pacific Basin Guatemala Basin East Caroline Basin Marianas Basin Philippine Sea Arabian Sea Chile Basin Somali Basin Mascarene Basin Crozet Basin Guinea Basin Brazil Basin Argentine Basin Tasman Sea Atlantic Indian Basin Caspian Sea Sulu Sea II Venezuela Basin Bay of Bengal Java Sea East Indian Atlantic Basin
- valid_min :
- 1
- valid_max :
- 58
- scale_min :
- 1
array([[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [11., 11., 11., ..., 11., 11., 11.], [11., 11., 11., ..., 11., 11., 11.], [11., 11., 11., ..., 11., 11., 11.]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [11., 11., 11., ..., 11., 11., 11.], [11., 11., 11., ..., 11., 11., 11.], [11., 11., 11., ..., 11., 11., 11.]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., ... ..., [11., 11., 11., ..., 11., 11., 11.], [11., 11., 11., ..., 11., 11., 11.], [11., 11., 11., ..., 11., 11., 11.]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)
- Conventions :
- IRIDL
We will now augment the raw dataset with derived quantities, including pressure (calculated from depth), absolute salinity, conservative temperature, and potential density at various reference levels.
woa['pres'] = gsw.p_from_z(-woa.depth, 0)
woa['s_a'] = gsw.SA_from_SP(woa.s_an, woa.pres, woa.lon, woa.lat)
woa['c_t'] = gsw.CT_from_t(woa.s_a, woa.t_an, woa.pres)
woa['sigma_0'] = gsw.sigma0(woa.s_a, woa.c_t)
woa['sigma_2'] = gsw.sigma2(woa.s_a, woa.c_t)
woa['sigma_4'] = gsw.sigma4(woa.s_a, woa.c_t)
woa
<xarray.Dataset>
Dimensions: (depth: 33, lat: 180, lon: 360)
Coordinates:
* lon (lon) float32 0.5 1.5 2.5 3.5 4.5 ... 355.5 356.5 357.5 358.5 359.5
* depth (depth) float32 0.0 10.0 20.0 30.0 ... 4e+03 4.5e+03 5e+03 5.5e+03
* lat (lat) float32 -89.5 -88.5 -87.5 -86.5 -85.5 ... 86.5 87.5 88.5 89.5
time datetime64[ns] 2008-01-01
Data variables:
t_an (depth, lat, lon) float32 nan nan nan nan nan ... nan nan nan nan
s_an (depth, lat, lon) float32 nan nan nan nan nan ... nan nan nan nan
t_dd (depth, lat, lon) float64 nan nan nan nan nan ... nan nan nan nan
basin (depth, lat, lon) float32 nan nan nan nan nan ... nan nan nan nan
pres (depth) float64 0.0 10.06 20.11 ... 4.573e+03 5.087e+03 5.602e+03
s_a (depth, lat, lon) float64 nan nan nan nan nan ... nan nan nan nan
c_t (depth, lat, lon) float64 nan nan nan nan nan ... nan nan nan nan
sigma_0 (depth, lat, lon) float64 nan nan nan nan nan ... nan nan nan nan
sigma_2 (depth, lat, lon) float64 nan nan nan nan nan ... nan nan nan nan
sigma_4 (depth, lat, lon) float64 nan nan nan nan nan ... nan nan nan nan
Attributes:
Conventions: IRIDL- depth: 33
- lat: 180
- lon: 360
- lon(lon)float320.5 1.5 2.5 ... 357.5 358.5 359.5
- long_name :
- longitude
- pointwidth :
- 1.0
- bounds :
- lon_bnds
- axis :
- X
- modulus :
- 360.0
- description :
- Longitude Range: 0 to 360 degrees with 0 at Greenwich Meridian and increasing along the east.
- standard_name :
- longitude
- gridtype :
- 1
- units :
- degree_east
array([ 0.5, 1.5, 2.5, ..., 357.5, 358.5, 359.5], dtype=float32)
- depth(depth)float320.0 10.0 20.0 ... 5e+03 5.5e+03
- standard_name :
- depth
- long_name :
- depth
- positive :
- down
- axis :
- Z
- description :
- Standard Depth Levels
- gridtype :
- 0
- units :
- m
array([ 0., 10., 20., 30., 50., 75., 100., 125., 150., 200., 250., 300., 400., 500., 600., 700., 800., 900., 1000., 1100., 1200., 1300., 1400., 1500., 1750., 2000., 2500., 3000., 3500., 4000., 4500., 5000., 5500.], dtype=float32) - lat(lat)float32-89.5 -88.5 -87.5 ... 88.5 89.5
- long_name :
- latitude
- pointwidth :
- 1.0
- bounds :
- lat_bnds
- axis :
- Y
- description :
- Latitude Range: -90 to 90 degrees with 0 at the Equator and increasing along the north.
- standard_name :
- latitude
- gridtype :
- 0
- units :
- degree_north
array([-89.5, -88.5, -87.5, -86.5, -85.5, -84.5, -83.5, -82.5, -81.5, -80.5, -79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5], dtype=float32) - time()datetime64[ns]2008-01-01
- pointwidth :
- 0
- gridtype :
- 0
array('2008-01-01T00:00:00.000000000', dtype='datetime64[ns]')
- t_an(depth, lat, lon)float32nan nan nan nan ... nan nan nan nan
- grid_mapping :
- crs
- standard_name :
- sea_water_temperature
- cell_methods :
- time:mean within years time:mean over years
- long_name :
- Sea Water Temperature
- units :
- degrees Celsius
- description :
- The objectively interpolated mean field for Sea Water Temperature for annual time period at each one-degree square at each standard depth.
array([[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [-1.6027, -1.583 , -1.5641, ..., -1.6467, -1.6357, -1.6209], [-1.6168, -1.605 , -1.5937, ..., -1.6421, -1.6363, -1.6276], [-1.6125, -1.6064, -1.6008, ..., -1.6203, -1.6188, -1.6154]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [-1.8245, -1.8032, -1.7863, ..., -1.855 , -1.8493, -1.8386], [-1.8001, -1.7884, -1.7767, ..., -1.8201, -1.8158, -1.8093], [-1.7704, -1.7638, -1.756 , ..., -1.7801, -1.7798, -1.7754]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., ... [-0.6856, -0.6856, -0.6856, ..., -0.6856, -0.6856, -0.6856], [-0.6856, -0.6856, -0.6856, ..., -0.6856, -0.6856, -0.6856], [-0.6856, -0.6856, -0.6856, ..., -0.6856, -0.6856, -0.6856]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], dtype=float32) - s_an(depth, lat, lon)float32nan nan nan nan ... nan nan nan nan
- standard_name :
- sea_water_salinity
- cell_methods :
- time:mean within years time:mean over years
- salinity_scale :
- Practical Salinity Scale(PSS-78)
- long_name :
- Sea Water Salinity
- units :
- unitless
- grid_mapping :
- crs
- description :
- The objectively interpolated mean field for Sea Water Salinity for annual time period at each one-degree square at each standard depth.
array([[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [31.8196, 31.8635, 31.884 , ..., 31.6614, 31.7311, 31.7661], [31.5965, 31.6369, 31.6655, ..., 31.5004, 31.5093, 31.5742], [31.395 , 31.4156, 31.4342, ..., 31.3159, 31.3376, 31.3604]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [32.4103, 32.4583, 32.4824, ..., 32.2429, 32.2778, 32.3209], [32.2732, 32.3243, 32.3533, ..., 32.1821, 32.1926, 32.259 ], [32.1368, 32.142 , 32.1698, ..., 32.0648, 32.0723, 32.105 ]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., ... [34.9423, 34.9423, 34.9423, ..., 34.9423, 34.9423, 34.9423], [34.9423, 34.9423, 34.9423, ..., 34.9423, 34.9423, 34.9423], [34.9423, 34.9423, 34.9423, ..., 34.9423, 34.9423, 34.9423]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], dtype=float32) - t_dd(depth, lat, lon)float64nan nan nan nan ... nan nan nan nan
- long_name :
- Number of Observations
- units :
- unitless
- grid_mapping :
- crs
- description :
- The number of observations of Sea Water Temperature in each one-degree square of the World Ocean at each standard depth level
array([[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [ 0., 0., 0., ..., 0., 0., 0.], [ 0., 0., 0., ..., 2., 2., 1.], [ 1., 1., 0., ..., 0., 0., 0.]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [ 1., 2., 2., ..., 0., 0., 0.], [ 1., 0., 0., ..., 2., 2., 2.], [ 1., 1., 0., ..., 0., 0., 0.]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., ... ..., [ 0., 0., 0., ..., 0., 0., 0.], [ 0., 0., 0., ..., 0., 0., 0.], [ 0., 0., 0., ..., 0., 0., 0.]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]) - basin(depth, lat, lon)float32nan nan nan nan ... nan nan nan nan
- long_name :
- basin code
- units :
- ids
- scale_max :
- 58
- CLIST :
- Atlantic Ocean Pacific Ocean Indian Ocean Mediterranean Sea Baltic Sea Black Sea Red Sea Persian Gulf Hudson Bay Southern Ocean Arctic Ocean Sea of Japan Kara Sea Sulu Sea Baffin Bay East Mediterranean West Mediterranean Sea of Okhotsk Banda Sea Caribbean Sea Andaman Basin North Caribbean Gulf of Mexico Beaufort Sea South China Sea Barents Sea Celebes Sea Aleutian Basin Fiji Basin North American Basin West European Basin Southeast Indian Basin Coral Sea East Indian Basin Central Indian Basin Southwest Atlantic Basin Southeast Atlantic Basin Southeast Pacific Basin Guatemala Basin East Caroline Basin Marianas Basin Philippine Sea Arabian Sea Chile Basin Somali Basin Mascarene Basin Crozet Basin Guinea Basin Brazil Basin Argentine Basin Tasman Sea Atlantic Indian Basin Caspian Sea Sulu Sea II Venezuela Basin Bay of Bengal Java Sea East Indian Atlantic Basin
- valid_min :
- 1
- valid_max :
- 58
- scale_min :
- 1
array([[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [11., 11., 11., ..., 11., 11., 11.], [11., 11., 11., ..., 11., 11., 11.], [11., 11., 11., ..., 11., 11., 11.]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [11., 11., 11., ..., 11., 11., 11.], [11., 11., 11., ..., 11., 11., 11.], [11., 11., 11., ..., 11., 11., 11.]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., ... ..., [11., 11., 11., ..., 11., 11., 11.], [11., 11., 11., ..., 11., 11., 11.], [11., 11., 11., ..., 11., 11., 11.]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32) - pres(depth)float640.0 10.06 ... 5.087e+03 5.602e+03
- standard_name :
- depth
- long_name :
- depth
- positive :
- down
- axis :
- Z
- description :
- Standard Depth Levels
- gridtype :
- 0
- units :
- m
array([ 0. , 10.0554684 , 20.11142784, 30.16787822, 50.28225153, 75.42797832, 100.57677078, 125.72862766, 150.8835477 , 201.2025722 , 251.5338342 , 301.87732362, 402.60094429, 503.37335332, 604.19446971, 705.06421233, 805.98249995, 906.94925122, 1007.96438468, 1109.02781877, 1210.13947182, 1311.29926206, 1412.50710765, 1513.76292662, 1767.11181903, 2020.75874803, 2528.94156481, 3038.301051 , 3548.8268504 , 4060.5085888 , 4573.33588663, 5087.29837213, 5602.38569503]) - s_a(depth, lat, lon)float64nan nan nan nan ... nan nan nan nan
- standard_name :
- sea_water_salinity
- cell_methods :
- time:mean within years time:mean over years
- salinity_scale :
- Practical Salinity Scale(PSS-78)
- long_name :
- Sea Water Salinity
- units :
- unitless
- grid_mapping :
- crs
- description :
- The objectively interpolated mean field for Sea Water Salinity for annual time period at each one-degree square at each standard depth.
array([[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [31.97240237, 32.01648388, 32.03705172, ..., 31.81353415, 31.88353903, 31.91867671], [31.74825288, 31.78882175, 31.81753506, ..., 31.65176273, 31.66068159, 31.7258692 ], [31.54580566, 31.56648522, 31.58515625, ..., 31.46637793, 31.48816508, 31.51105612]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ... [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]]) - c_t(depth, lat, lon)float64nan nan nan nan ... nan nan nan nan
- standard_name :
- sea_water_salinity
- cell_methods :
- time:mean within years time:mean over years
- salinity_scale :
- Practical Salinity Scale(PSS-78)
- long_name :
- Sea Water Salinity
- units :
- unitless
- grid_mapping :
- crs
- description :
- The objectively interpolated mean field for Sea Water Salinity for annual time period at each one-degree square at each standard depth.
array([[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [-1.59548214, -1.57576602, -1.55682601, ..., -1.63946344, -1.62849936, -1.61368486], [-1.60937544, -1.59757559, -1.58626558, ..., -1.63467168, -1.62885754, -1.62019321], [-1.60483559, -1.59873232, -1.59312938, ..., -1.61258496, -1.61110129, -1.60771077]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ... [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]]) - sigma_0(depth, lat, lon)float64nan nan nan nan ... nan nan nan nan
- standard_name :
- sea_water_salinity
- cell_methods :
- time:mean within years time:mean over years
- salinity_scale :
- Practical Salinity Scale(PSS-78)
- long_name :
- Sea Water Salinity
- units :
- unitless
- grid_mapping :
- crs
- description :
- The objectively interpolated mean field for Sea Water Salinity for annual time period at each one-degree square at each standard depth.
array([[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [25.59790153, 25.63306036, 25.64923885, ..., 25.47053499, 25.52684798, 25.55490941], [25.41717289, 25.44968552, 25.47262952, ..., 25.33976692, 25.34685117, 25.39932252], [25.25357471, 25.27014956, 25.28511148, ..., 25.1895845 , 25.20715062, 25.2255691 ]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ... [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]]) - sigma_2(depth, lat, lon)float64nan nan nan nan ... nan nan nan nan
- standard_name :
- sea_water_salinity
- cell_methods :
- time:mean within years time:mean over years
- salinity_scale :
- Practical Salinity Scale(PSS-78)
- long_name :
- Sea Water Salinity
- units :
- unitless
- grid_mapping :
- crs
- description :
- The objectively interpolated mean field for Sea Water Salinity for annual time period at each one-degree square at each standard depth.
array([[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [35.06460844, 35.09773888, 35.11235726, ..., 34.94284954, 34.99722256, 35.0237221 ], [34.88874663, 34.91979128, 34.9415098 , ..., 34.81465928, 34.82121664, 34.87197891], [34.72846576, 34.74428627, 34.75856141, ..., 34.66638059, 34.68346473, 34.70126092]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ... [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]]) - sigma_4(depth, lat, lon)float64nan nan nan nan ... nan nan nan nan
- standard_name :
- sea_water_salinity
- cell_methods :
- time:mean within years time:mean over years
- salinity_scale :
- Practical Salinity Scale(PSS-78)
- long_name :
- Sea Water Salinity
- units :
- unitless
- grid_mapping :
- crs
- description :
- The objectively interpolated mean field for Sea Water Salinity for annual time period at each one-degree square at each standard depth.
array([[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [44.10303826, 44.13426281, 44.14741725, ..., 43.98655414, 44.03910007, 44.06413173], [43.93176702, 43.9614308 , 43.98199736, ..., 43.86080232, 43.86686485, 43.91601663], [43.77462375, 43.78973456, 43.8033636 , ..., 43.71433523, 43.73096453, 43.7481743 ]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ... [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]])
- Conventions :
- IRIDL
Before diving into the actual data, letβs first examine the number of observations in each grid cell. This shows how some parts of the ocean are much better sampled than others.
woa.t_dd.where(woa.t_dd > 0).hvplot('lon', 'lat', logz=True, width=700, height=400)
Later we will split up the ocean by basin. Here is how WOA defines the different basins.
woa.basin.where(woa.basin<20).hvplot('lon', 'lat', logz=True, width=700, height=400, cmap='Category20')
print(woa.basin.attrs['CLIST'])
Atlantic Ocean
Pacific Ocean
Indian Ocean
Mediterranean Sea
Baltic Sea
Black Sea
Red Sea
Persian Gulf
Hudson Bay
Southern Ocean
Arctic Ocean
Sea of Japan
Kara Sea
Sulu Sea
Baffin Bay
East Mediterranean
West Mediterranean
Sea of Okhotsk
Banda Sea
Caribbean Sea
Andaman Basin
North Caribbean
Gulf of Mexico
Beaufort Sea
South China Sea
Barents Sea
Celebes Sea
Aleutian Basin
Fiji Basin
North American Basin
West European Basin
Southeast Indian Basin
Coral Sea
East Indian Basin
Central Indian Basin
Southwest Atlantic Basin
Southeast Atlantic Basin
Southeast Pacific Basin
Guatemala Basin
East Caroline Basin
Marianas Basin
Philippine Sea
Arabian Sea
Chile Basin
Somali Basin
Mascarene Basin
Crozet Basin
Guinea Basin
Brazil Basin
Argentine Basin
Tasman Sea
Atlantic Indian Basin
Caspian Sea
Sulu Sea II
Venezuela Basin
Bay of Bengal
Java Sea
East Indian Atlantic Basin
3D TemperatureΒΆ
def map_section_plot(data, label, data_range, levels, cmap='viridis'):
ds = hv.Dataset(data)
img = ds.to(hv.Image, ['lon', 'lat'], label=label)
img = img.redim.range(**{data.name: data_range})
posx = hv.streams.PointerX()
vline = hv.DynamicMap(lambda x: hv.VLine(x or 180.5), streams=[posx])
lats = np.arange(-90, 91)
def cross_section(x):
mesh = hv.QuadMesh((lats, woa.depth, data.sel(lon=x if x else 180, method='nearest').data[:-1]),
kdims=['lat', 'depth'], label=(label + ' Section'))
contours = hv.operation.contours(mesh, levels=levels,
overlaid=False, filled=True)
return contours
crosssection = hv.DynamicMap(cross_section, streams=[posx])
layout = (img * vline) + crosssection
# set view options
dict_spec = {'Image': {'plot': dict(colorbar=True, toolbar='above', width=600),
'style': dict(cmap=cmap)},
'NdOverlay': {'plot': dict(bgcolor='grey', invert_yaxis=True, width=600, height=200)},
'Layout': {'plot': dict(show_title=False)},
'Polygons': {'plot': dict(colorbar=True, invert_yaxis=True, width=600),
'style': dict(cmap=cmap, line_width=0.1)}
}
layout.cols(1)
layout = layout.opts(dict_spec)
return layout
map_section_plot(woa.t_an, 'Temperature', (-2,30), np.arange(-2,31), cmap='RdBu_r')
ObservationsΒΆ
The warmest water is near the surface in the tropical regions, forming a bowl-shaped lens in the upper ~800 meters. This is called the thermocline.
There are clear zonal asymmetries in surface temperature. The western boundaries of the basins tend to be warmer, with colder water near the eastern boundaries.
There is something special going on at the equator, especially in the Pacific. Itβs relatively cold, and the thermocline is shallow.
Below 1000 m, the water is mostly very cold (< 5 C).
In the polar regions, the coldest water is actually found near the surface! There is a mid-depth temperature maximum.
3D SalinityΒΆ
map_section_plot(woa.s_an, 'Salinity', (32,38), np.arange(32,38.1, 0.25))
ObservationsΒΆ
Salinity has a more complex structure than temperature.
The Atlantic is overall saltier than the Pacific.
The saltiest parts of the oceans are the extra-tropical-latitudes.
The equator is relatively fresh near the surface.
Salinity sections across the Atlantic reveal the interleaving of several different water masses including
Mediterranean Water
North Atlantic Deep Water
Antarctic Intermediate Water
Antarctic Bottom Water
3D Potential DensityΒΆ
map_section_plot(woa.sigma_0, 'Potential Density (sigma0)', (22.,28.), np.arange(22,28.1, 0.25))
map_section_plot(woa.sigma_4, 'Potential Density (sigma4)', (40.,46.5), np.arange(40,46.5, 0.25))