def sliders_changed(msheSlider, modisSlider):
modisItemName = 'Snow Cover'
msheItemName = 'Fraction of cell area covered by Snow'
timeIndex = modisSnowDfs2[modisItemName].time.get_loc(modisSlider)
modisSingleTimestep = modisSnowDfs2[modisItemName].isel(
time=timeIndex) / 100.0
timeIndex = mikeSheSnowDfs2[msheItemName].time.get_loc(msheSlider)
mikeSheSingleTimestep = mikeSheSnowDfs2[msheItemName].isel(time=timeIndex)
# use nans in MSHE to set nans in MODIS to mask out catchment
modisSingleTimestep.values = np.where(np.isnan(
mikeSheSingleTimestep.values), mikeSheSingleTimestep.values, modisSingleTimestep.values)
modisSingleDataArray = modisSingleTimestep.to_xarray()
modisSingleDataArray.attrs['units'] = 'Fraction'
# 3 column layout
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(21, 5))
modisSingleDataArray.plot.pcolormesh(
ax=ax1, vmin=0.0, vmax=1.0, cmap="jet")
ax1.set_title('MODIS')
mikeSheSingleDataArray = mikeSheSingleTimestep.to_xarray()
mikeSheSingleDataArray.attrs['units'] = 'Fraction'
mikeSheSingleDataArray.plot.pcolormesh(
ax=ax2, vmin=0.0, vmax=1.0, cmap="jet")
ax2.set_title('MIKE SHE')
diff = modisSingleTimestep.copy()
diff.values = modisSingleTimestep.values - mikeSheSingleTimestep.values
categories = ['MSHE Higher', 'Similar', 'Similar', 'MODIS Higher']
colors = ['yellow', 'green', 'red']
boundaries = [-1.0, -0.1, 0.1, 1.0]
cmap = mpl.colors.ListedColormap(colors)
norm = mpl.colors.BoundaryNorm(boundaries, cmap.N)
diffPlot = diff.to_xarray().plot.pcolormesh(ax=ax3, cmap=cmap, norm=norm)
cbar = diffPlot.colorbar
cbar.set_ticklabels(categories)
cbar.set_label(None)
ax3.set_title('Difference (MODIS - MIKE SHE)')
plt.tight_layout()
style = {'description_width': 'initial'}
msheSlider = widgets.SelectionSlider(
options=mikeSheSnowDfs2.time,
value=mikeSheSnowDfs2.time[0],
description='MSHE Timestep',
disabled=False,
continuous_update=False,
orientation='horizontal',
readout=True,
style=style,
layout=widgets.Layout(width='800px', margin='0 30px 0 0 ')
)
# constrain the modis timesteps to the mshe, as modis covers far more
modis_time_slicer = modisSnowDfs2.time.slice_indexer(
start=mikeSheSnowDfs2.time[0], end=mikeSheSnowDfs2.time[-1])
filtered_modis_times = modisSnowDfs2.time[modis_time_slicer]
modisSlider = widgets.SelectionSlider(
options=filtered_modis_times,
value=filtered_modis_times[0],
description='MODIS Timestep',
disabled=False,
continuous_update=False,
orientation='horizontal',
readout=True,
style=style,
layout=widgets.Layout(width='800px', margin='0 30px 0 0 ')
)