Winter Arctic sea ice state variability (updates through to April 2022)#

Summary: In this notebook, we provide updates to the original winter Arctic sea ice thickness notebooks with an additional winter (2021-2022) of data collection. Here we read the IS2SITMOGR4 files from our AWS S3 bucket, instead of our aggregated Jupyter Book dataset. I generally focus on showing the ‘’smoothed/interpolated’ variables, whereas Petty et al., (2023) focussed more on the non-interpolated gridded data. Once we produce an updated aggregated Jupyter Book dataset we can update this notebook with those additional variables.

Version history: Version 1 (01/23/2023)

Import notebook dependencies#

# For working with gridded climate data 
import xarray as xr 
# Helper function for reading the data from the bucket
from utils.read_data_utils import read_IS2SITMOGR4 
from utils.plotting_utils import static_winter_comparison_lineplot, staticArcticMaps, staticArcticMaps_overlayDrifts, interactiveArcticMaps, compute_gridcell_winter_means, interactive_winter_comparison_lineplot # Plotting utils 
import numpy as np
# Plotting dependencies
#%config InlineBackend.figure_format = 'retina'
import matplotlib as mpl
# Sets figure size in the notebook
mpl.rcParams['figure.dpi'] = 150 

# Remove warnings to improve display
import warnings 
warnings.filterwarnings('ignore') 
# Read in the raw monthly gridded winter Arctic sea ice data from S3 (still using V2)
IS2SITMOGR4_all = read_IS2SITMOGR4(data_type='zarr-s3', 
                                   local_data_path='./data/IS2SITMOGR4/', version='V2',persist=True) 
IS2SITMOGR4_all
load zarr from S3 bucket
zarr_path: s3://icesat-2-sea-ice-us-west-2/IS2SITMOGR4_V3/IS2SITMOGR4_V3_201811-202404.zarr
<xarray.Dataset>
Dimensions:                         (time: 46, y: 448, x: 304)
Coordinates:
    latitude                        (y, x) float32 31.1 31.2 ... 34.58 34.47
    longitude                       (y, x) float32 168.3 168.1 ... -10.18 -9.999
  * time                            (time) datetime64[ns] 2018-11-01 ... 2024...
  * x                               (x) float32 -3.838e+06 ... 3.738e+06
  * y                               (y) float32 5.838e+06 ... -5.338e+06
Data variables: (12/27)
    crs                             (time) int32 dask.array<chunksize=(46,), meta=np.ndarray>
    freeboard                       (time, y, x) float32 dask.array<chunksize=(1, 448, 304), meta=np.ndarray>
    freeboard_int                   (time, y, x) float32 dask.array<chunksize=(1, 448, 304), meta=np.ndarray>
    ice_density                     (time, y, x) float32 dask.array<chunksize=(1, 448, 304), meta=np.ndarray>
    ice_density_j22                 (time, y, x) float32 dask.array<chunksize=(1, 448, 304), meta=np.ndarray>
    ice_thickness                   (time, y, x) float32 dask.array<chunksize=(1, 448, 304), meta=np.ndarray>
    ...                              ...
    snow_density_sm                 (time, y, x) float32 dask.array<chunksize=(1, 448, 304), meta=np.ndarray>
    snow_density_w99                (time, y, x) float32 dask.array<chunksize=(1, 448, 304), meta=np.ndarray>
    snow_depth                      (time, y, x) float32 dask.array<chunksize=(1, 448, 304), meta=np.ndarray>
    snow_depth_int                  (time, y, x) float32 dask.array<chunksize=(1, 448, 304), meta=np.ndarray>
    snow_depth_mw99                 (time, y, x) float32 dask.array<chunksize=(1, 448, 304), meta=np.ndarray>
    snow_depth_sm                   (time, y, x) float32 dask.array<chunksize=(1, 448, 304), meta=np.ndarray>
Attributes:
    contact:      Alek Petty (akpetty@umd.edu)
    description:  Aggregated IS2SITMOGR4 V3 dataset.
    history:      Created 28/11/23
    reference:    Official NSIDC data doi: 10.5067/CV6JEXEE31HF. Derived data...
# Years over which to perform analysis
years = [2018,2019,2020, 2021]

Winter mean Arctic maps (static)#

Compute and map (static) mean winter sea ice conditions across the years of analysis chosen

freeboard_winter_means = compute_gridcell_winter_means(IS2SITMOGR4_all.freeboard_int, years=years)
staticArcticMaps(freeboard_winter_means, dates=freeboard_winter_means.time.values, set_cbarlabel = "Sea ice freeboard (m)", cmap="YlOrRd", col_wrap=4, vmin=0, vmax=0.8, out_str='freeboard_winter_2018_2022')
../_images/4617a2a9cc5a993a9ac8792e63c3b612e005570cbac7c2fbfde50870821ae9fe.png
snow_depth_winter_means = compute_gridcell_winter_means(IS2SITMOGR4_all.snow_depth_int, years=years)
staticArcticMaps(snow_depth_winter_means, dates=snow_depth_winter_means.time.values,set_cbarlabel = "Snow depth (m)", cmap="inferno", col_wrap=4, vmin=0, vmax=0.5, out_str='snowdepth_winter_2018_2022')
../_images/1a646856a05a1118cb883ad9059ea5fe85dbfa4eecfb2405a61ed101aae47228.png
thickness_winter_means = compute_gridcell_winter_means(IS2SITMOGR4_all.ice_thickness_int, years=years)
staticArcticMaps(thickness_winter_means, dates=thickness_winter_means.time.values,title="", set_cbarlabel = "Sea ice thickness (m)", col_wrap=4, cmap="viridis", vmin=0, vmax=5, out_str='thickness_winter_2018_2022')
../_images/df72b06e7fdc87e1f51cc4c238cf8de8e16f21cdb109fd9905e2b118e2eae482.png
snow_density_winter_means = compute_gridcell_winter_means(IS2SITMOGR4_all.snow_density, years=years)
staticArcticMaps(snow_density_winter_means, dates=snow_density_winter_means.time.values,set_cbarlabel = "Snow density (kg/m3)", cmap="GnBu", col_wrap=4, vmin=240, vmax=330, out_str='snowdensity_winter_2018_2022')
../_images/395be247982d2ba87886ca8bf456146c34fe5146e36e735b781f1a144f8cb816.png
ice_type_winter_means = compute_gridcell_winter_means(IS2SITMOGR4_all.ice_type, years=years)
staticArcticMaps(ice_type_winter_means, dates=ice_type_winter_means.time.values, set_cbarlabel = "Sea ice type (0 = FYI, 1 = MYI)", col_wrap=4, cmap="YlOrRd", vmin=0, vmax=1, out_str='icetype_winter_2018_2022')
../_images/da3e74aff3ae6585333a9e8e66ac662dcee0d7c0973090db46eba06a2f595c54.png

Winter anomaly plots#

Compute and map (static) winter anomaly maps (relative to the mean across the three winters by default) for given variables across the four winters

freeboard_winter_means = compute_gridcell_winter_means(IS2SITMOGR4_all.freeboard, years=years)
staticArcticMaps(freeboard_winter_means-freeboard_winter_means.mean(axis=0), dates=freeboard_winter_means.time.values,title="", col_wrap=4, set_cbarlabel = "Sea ice freeboard anomaly (m)", cmap="BrBG", vmin=-0.2, vmax=0.2, out_str='freeboard_winter_anomaly_2018_2022')
../_images/3f5acea14fb25a15c7d0455c62e352eaa4ff26320f7bfb5414f2bdb06dc71f51.png
snow_depth_winter_means = compute_gridcell_winter_means(IS2SITMOGR4_all.snow_depth, years=years)
staticArcticMaps(snow_depth_winter_means-snow_depth_winter_means.mean(axis=0), dates=snow_depth_winter_means.time.values,col_wrap=4, set_cbarlabel = "Snow depth anomaly (m)", cmap="PRGn", vmin=-0.2, vmax=0.2, out_str='snowdepth_winter_anomaly_2018_2022')
../_images/8328776dbd950b4d4e6ba599016a4365d729e9ce7c014451ebdb984b26702df3.png
thickness_winter_means = compute_gridcell_winter_means(IS2SITMOGR4_all.ice_thickness_int, years=years)
staticArcticMaps(thickness_winter_means-thickness_winter_means.mean(axis=0), dates=thickness_winter_means.time.values,col_wrap=4, set_cbarlabel = "Sea ice thickness anomaly (m)", cmap="RdBu", vmin=-1.5, vmax=1.5, out_str='thickness_winter_anomaly_2018_2022')
../_images/99003666cfee0f7453e16f3c45e03cd47032c74cdcf0bced333ca1a7094971ad.png

Monthly mean timeseries#

Next we’ll compute monthly means by averaging over all gridcells within a given region. We’ll use this to generate a lineplot to compare across the three winter seasons for each variable.

# Here is where we might also want to set a region mask, e.g. to avoid including some of the more uncertain data in the peripheral seas
innerArctic = [1,2,3,4,5,6]
IS2SITMOGR4_all_innerArctic = IS2SITMOGR4_all.where(IS2SITMOGR4_all.region_mask.isin(innerArctic))

# Uncomment out to set an additional ice type mask too and change the save_label accordingly (0 = FYI, 1 = MYI)
#IS2SITMOGR4_all_innerArctic = IS2SITMOGR4_all_innerArctic.where(IS2SITMOGR4_all_innerArctic.ice_type==1)

save_label='Inner_Arctic'
static_winter_comparison_lineplot(IS2SITMOGR4_all_innerArctic.freeboard, years=years, start_month="Sep", figsize=(5,3), annotation='(a)', set_ylabel=r'Total freeboard (m)', save_label=save_label, loc_pos=4, legend=True)
../_images/2ea80afb4d29f12ebd8262df70766085427525072d3953095fc35f17b6032a6e.png
static_winter_comparison_lineplot(IS2SITMOGR4_all_innerArctic.snow_depth, years=years, start_month="Sep", figsize=(5,3), annotation='(b)',set_ylabel='Snow depth (m)', save_label=save_label, legend=False)
../_images/95ddd183b92671e40a015224e679d8bdd12cdff4e855494894a93787cf2440e4.png
static_winter_comparison_lineplot(IS2SITMOGR4_all_innerArctic.snow_density, years=years, start_month="Sep", figsize=(5,3), annotation='(c)',set_ylabel=r'Snow density (kg/m$^3$)', save_label=save_label, legend=False)
../_images/490956e9c5767dc1baf3a69f3b0aa697b6c17a2736900876ec7e2db855512cba.png
static_winter_comparison_lineplot(IS2SITMOGR4_all_innerArctic.ice_thickness, 
                                  da_unc = IS2SITMOGR4_all_innerArctic.ice_thickness_unc, 
                                  years=years, start_month="Sep", figsize=(5,3), set_ylabel='Sea ice thickness (m)', save_label=save_label, annotation='', legend=True)
../_images/1002610aa8099d6216b30b7fd752faa5554e826455ef6cb24730ac6b2fc62650.png
static_winter_comparison_lineplot(IS2SITMOGR4_all_innerArctic.sea_ice_conc, years=years, start_month="Sep", figsize=(5,3), annotation='(e)', set_ylabel='Sea ice concentration', save_label=save_label, legend=False)
../_images/198958e6c62683c62151abf5097295b2bfbdf2fd10454cd8c7c02fed2c959971.png
static_winter_comparison_lineplot(IS2SITMOGR4_all_innerArctic.ice_type, years=years, start_month="Sep", figsize=(5,3), annotation='(f)',set_ylabel='Multi-year ice fraction', save_label=save_label, legend=False)
../_images/952edba432707ec65201e8dea2e3bb391e808844878f917289dd4cbeb5bf05dd.png

Winter mean Arctic maps (interactive, preliminary)#

Interactively map the mean winter sea ice conditions across the most recent winter months.
NB: interactive plotting is slow but can be useful for the zoom functionality and for looking at exacty grid-cell/regional values. Plotting all months in the dataset pushes the notebook above 100 Mb which triggers a GitHubt warning

interactiveArcticMaps(IS2SITMOGR4_all.ice_thickness_int.sel(time=slice('2021-09-01', '2022-04-01')), title='IS2SITMOGR4', frame_width=600)
#interactive_winter_comparison_lineplot(IS2SITMOGR4_all.ice_thickness, frame_width=800, title="Arctic Ocean mean winter ICESat-2 sea ice thickness")