我喜欢使用 cellfun 来绘制操作而不是循环,例如,如果我有多组传感器数据并且每组有多个列(因为每组有多个传感器),使用起来非常方便
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{:}])
而不是循环。此示例绘制所有数据集,每个数据集以自己的颜色绘制,每个数据集的每个传感器使用其他线型。图例仅针对每个数据集显示(注意:这也可以通过使用 hggroups 来完成)。
或者一个更简单的用例 - 我再次有一个数据单元格数组,并希望对其有一个简短的了解:
figure, hold all, cellfun(@plot,dataCell)
就是这样,一行,在命令行中非常快。
另一个很好的用例是使用 mean()、max()、min()、std() 等压缩高维数据数值数据,但您已经提到过这一点。如果数据大小不统一,这一点就变得更加重要。