I love using cellfun for plotting operations instead of looping, for example if I have multiple sets of sensor data and each set has multiple columns (because of multiple sensors per set) it's very convenient using
numOfSensors = 5;
numOfSets = 6;
%% sample data preparation
x = 1:100;
y = rand(length(x), numOfSets*numOfSensors);
yCell = mat2cell(y, 100, numOfSensors*ones(1,numOfSets)); % this is my sensor data
scaleCell = num2cell(fliplr(cumsum(1:numOfSets)));
yCell = cellfun(@(x, scale)x.*scale, yCell, scaleCell, 'unif', false);
%% plot preparation
nameCell = arrayfun(@(x)['sensor set ' num2str(x)], 1:numOfSets, 'unif', false);
colorCell = num2cell(lines(numOfSets), 2)';
%% plot
figure, hold all,
set(gca, 'ColorOrder', [0 0 0], 'LineStyleOrder', {'-','--','-*','-.',':'})
h = cellfun(@(y, name, c)plot(x, y, 'linewidth', 1.5, 'displayName', name, 'color', c), yCell, nameCell, colorCell, 'unif', false);
hh = cellfun(@(x)x(1), h, 'unif', false);
legend([hh{:}])
instead of looping. This example plots all datasets, each dataset in it's own color and each sensor per dataset with an other linestyle. The legend is displayed for each data set only (note: this could also be done by using hggroups).
Or a simpler using case - I have a cell array of data again and want to have a short view at it:
figure, hold all, cellfun(@plot,dataCell)
That's it, one line, very fast in the command line.
Another great use case is compressing higher dimensional data numerical data by using mean(), max(), min(), std() and so on, but you've mentioned this already. This gets even more important if the data is not of uniform size.