Jim, that's a great start from the tutorial. A few quick suggestions that might change your mind.
1. Set the vmin to -20 and vmax to -1.625
im = ax.imshow(dtc, cmap='jet', vmin=-20, vmax=-1.625,
2. set the whitespace above snow to a low alpha setting to show the air temps. I rem it out completely with #
ax.fill_between(timestamp, temp_string_top, snow_height, color='white', zorder=2, alpha=0.2)
3. do the same to the snow layer
ax.fill_between(timestamp, snow_height, 0, color="grey", zorder=1,alpha=0.2)
4. Turn the water layer into a thin line so you can see the water temps
ax.fill_between(timestamp, ice_thickness, ice_thickness+0.02, color='b', zorder=3)
Now you can use your expert judgement to align the air temperatures with the snow layer using the temp string offset. I think it is around 0.06 to 0.08, a couple of centimetres, but I would love to have a second opinion.
To clarify, onset of thickening isn't significant thickening, it's a first tick down that stays down, but I think it's important for defining when the ice has changed state. I'm not really into forecasting as I'm useless at it, but I'm glad my last post means that at least 2 of us are watching to see when it happens.
Unfortunately we don't have 1m water temps, in this case itp128 starts at 8m.
If you want to try different interpolation add interpolation='blah' to the im= line
im = ax.imshow(dtc, cmap='jet', vmin=-20, vmax=-1.625, extent=[timestamp[0], timestamp[-1], temp_string_bottom, temp_string_top],interpolation='hanning',
note also that the dtc temps may need to be adjusted.