2016-05-30 9 views
0

これはこのフォーラムではエコとなるかもしれませんが、問題に適用できる解決策を見つけることができませんでした。 res_A1のサイズ(1x500)のセルがあり、各セルには長さが変わるベクトル(1xlength)があります。私はすべてのベクトルまたはおそらく一握りの同じグラフにプロットしたいと思います。すべての線は同じ色にできます。私は、次の試みているが、グラフは異なる長さのセル配列からプロットする

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

はまた、私は500個のベクトルの平均値をプロットしたい意味をなさない、好ましくは、これは別の色で同じグラフであるべきです。これを行う良い方法はありますか?

答えて

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

あなたは平均をプロットしたい場合は、単にcatへの呼び出しの結果にmeanを使用しています。

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

更新

あなたのデータは、すべての異なるlである場合あなたは2つの選択肢があります。すべてをループでプロットすることができます。

hax = axes; 
hold(hax, 'on'); 

for k = 1:numel(data) 
    plot(data{k}, 'Parent', hax); 
end 

それともまだNaN値で1つの行列、パディングにすべてを組み合わせるために試みることができます。

% 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); 
+0

これはサンプルデータで完璧に機能します。しかし、データの長さが違うので、「連結されている行列の次元が一貫していません」というメッセージが表示されます。 – Orongo

+0

@Orongoは、異なる長さベクトルを扱う方法の例で更新されました。 – Suever

+0

Sueverそれは夢のように動作します!完璧!どうもありがとう! – Orongo

関連する問題