We don't have the ranges for T,S but they appear to be pretty closely spaced from the plot. Either only plot every Nth point or use the 'LabelSpacing' named parameter to reduce the number of labels shown.
The idea with data reduction---
T = stations.Temperature;
[X,Y] = meshgrid(S(1:nSpacing:end),T(1:nSpacing:end));
contour(X, Y, Z, 'color', 'k', 'ShowText','on', "LabelFormat","%0.1f");
Or, with all data plotted but reducing the number of labels shown...
T = stations.Temperature;
contour(X, Y, Z, 'color', 'k', 'ShowText','on', "LabelFormat","%0.1f",'LabelSpacing',144*nSpacing);
The default for 'LabelSpacing' is 144 points, the above sets a multiplier on that value. This is a single vaue for the whole plot, given the appearance that the point density is higher at larger X, you may need to use a variable selection of point spacing instead to get a more uniform spread of written labels.