这可能会成为这个论坛的生态环境,但我无法找到可以应用于我的问题的解决方案。我有一个大小为(1x500)的res_A1的单元格,并且在每个单元格中有一个长度不同的向量(1xlength)。我想在每个矢量或同样的一些矢量中绘制相同的图形。所有线条可以是相同的颜色。我试过跟随,但图表毫无意义
data=res_A1(1,:,end);
plot(cell2mat(data)');
此外,我想绘制500个向量的平均值,最好是在另一种颜色的同一图表中。这样做有什么好办法吗?
答案 0 :(得分:1)
您可以使用cat
组合第一维的向量。然后你可以将这个矩阵的转置传递给plot
,每个列都会被绘制成它自己的图。
plot(cat(1, data{:}).');
如果我们创建一些示例数据,这将产生。
data = arrayfun(@(x)rand(1,10), ones(1, 5), 'uni', 0);
plot(cat(1, data{:}).');
如果您想要特定的([1 3 5]
),您可以将上面的:
替换为您想要的索引。
plot(cat(1, data{[1 3 5]}).');
如果您想绘制平均值,只需对调用mean
的结果使用cat
。
avg = mean(cat(1, data{:}), 1);
plot(avg);
如果你想要它在同一个情节中:
alldata = cat(1, data{:});
avg = mean(alldata, 1);
% Plot all of the curves
plot(alldata.');
hold on
% Plot the average curve
plot(avg, 'LineWidth', 3, 'Color', [0.5 0.5 0.5], 'LineStyle', '--')
<强>更新强>
如果您的数据长度不同,您有两个选项,您可以用循环绘制所有内容。
hax = axes;
hold(hax, 'on');
for k = 1:numel(data)
plot(data{k}, 'Parent', hax);
end
或者你仍然可以尝试将所有内容组合成一个矩阵,用NaN
值填充。
% Find the longest vector length
maxlength = max(cellfun(@(x)numel(x), data));
alldata = nan(maxlength, numel(data));
for k = 1:numel(data)
alldata(1:numel(data{k}),k) = data{k};
end
然后你可以使用nanmean
绘制这个并取平均值。
plot(alldata);
avg = nanmean(alldata, 2);