从不同长度的单元阵列绘制

时间:2016-05-30 17:47:32

标签: matlab plot

这可能会成为这个论坛的生态环境,但我无法找到可以应用于我的问题的解决方案。我有一个大小为(1x500)的res_A1的单元格,并且在每个单元格中有一个长度不同的向量(1xlength)。我想在每个矢量或同样的一些矢量中绘制相同的图形。所有线条可以是相同的颜色。我试过跟随,但图表毫无意义

data=res_A1(1,:,end);
plot(cell2mat(data)');

此外,我想绘制500个向量的平均值,最好是在另一种颜色的同一图表中。这样做有什么好办法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用cat组合第一维的向量。然后你可以将这个矩阵的转置传递给plot,每个列都会被绘制成它自己的图。

plot(cat(1, data{:}).');

如果我们创建一些示例数据,这将产生。

data = arrayfun(@(x)rand(1,10), ones(1, 5), 'uni', 0);
plot(cat(1, data{:}).');

enter image description here

如果您想要特定的([1 3 5]),您可以将上面的:替换为您想要的索引。

plot(cat(1, data{[1 3 5]}).');

enter image description here

如果您想绘制平均值,只需对调用mean的结果使用cat

avg = mean(cat(1, data{:}), 1);
plot(avg);

enter image description here

如果你想要它在同一个情节中:

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', '--')

enter image description here

<强>更新

如果您的数据长度不同,您有两个选项,您可以用循环绘制所有内容。

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);