The ytickformat function controls how tick label strings are automatically calculated based on tick values, but only if the user has not specified their own tick labels.
When the YTickLabel or TickLabels property is set, it overrides automatic generation of the tick labels. If the user has manually specified tick labels, we display exactly what the user provided with no manipulation. The TickLabelFormat has no impact in this case.
The YTick/TickValues are only used to generate tick labels when the YTickLabel property is set to 'auto'. Otherwise, the user provided labels are used directly.
I think the confusion here is that you are setting the YTickLabel property to a numeric vector. When you set the YTickLabel property to a numeric vector, the values are immediately converted into character vectors. If you query the value of the YTickLabel property back again, you will see that the numeric values have been replaced by a character matrix. Once this conversion is done, MATLAB no longer treats them as numbers, they are now labels to be used literally. The TickLabelFormat has no impact on how this conversion is being done.
What you can to do is either set the YTick values and use the TickLabelFormat (or ytickformat) to control how the tick values are converted into labels, or you can generate labels for yourselves using something like 'sprintf' or 'compose', which can take a numeric vector and a format string. This will produce labels formatted to the user's specification, then you can set the YTickLabel property with those pre-formatted labels.
Best Answer