0

だから私はまだMatlabに慣れていて、プロットに少し苦労しています。各行にポイントのリストを含むセルがあります。ポイントの各行を同じグラフに異なる色でプロットして、それらを比較できるようにしたいと考えています。問題は、未知の数のポイントと行に対してこれを機能させる必要があることです (つまり、プログラムを実行するたびにポイントと行の数が変わる可能性があります)。

たとえば、セル配列 A があるとします。

A = {[0,0]、[1,2]、[3,4]; [0,0] [5,6], [9,2]}

行1のポイントをインデックス(3Dグラフ)に対してプロットし、同じグラフの行2のポイントを別の色でプロットしたい。行は常に同じ長さになります。(各行には常に同じ数のポイントがあります)。いくつかの異なる for ループを試しましたが、これを正しく行うことができないようです。

私を正しい方向に送るための助けがあれば大歓迎です!

4

2 に答える 2

0

それを行列に変換して直接プロットすることができます:

% Some dummy data - format a little different from your example 
% to allow for different numbers of elements per row
A = {[0,0, 1,2, 3,4]; [0,0, 5,6]};

% Figure out how many columns we need in total
maxLen = max(cellfun(@length, A));
% Preallocate
Amat = NaN(size(A, 1), maxLen);
% Copy data
for n = 1:size(A, 1)
    curA = A{n}; 
    Amat(n, 1:length(curA)) = curA; 
end

% Generate 1:N vector repeated the correct number of times (rows)
x = repmat(1:size(Amat, 2), size(Amat, 1), 1);
plot(x, Amat)

編集:投稿のある時点で 3D グラフについて言及しました。上記は 3D グラフをプロットしないため、次のようになります。

% Generate Amat as above

% Then:
[X, Y] = meshgrid(1:size(Amat, 1), 1:size(Amat, 2));
surf(X, Y, Amat.'); % OR: plot3(X, Y, Amat.');

これがまさにあなたが望むものかどうかはわかりませんが、あなたの質問は、これからどのような種類のグラフが必要かについて少し不明確です。プロットに色付きの線だけが必要な場合は、plot3の代わりに使用できますsurfが、IMHOsurfはおそらくこの種のデータに対してより明確なプロットを提供します。

于 2013-04-12T10:55:22.880 に答える