1

Matlabでスパイラルを作成してプロットする次のコードがあります。色を制御し、matlab で色付けを行う代わりに、自分で 3 ~ 4 色を追加したいと考えています。自分で色を付けて、色を制御するにはどうすればよいですか? これが私のコードです:

N = 1000;
r = linspace(0,1,N);
t = (3*pi/2)*(1+2*r);
x(1,:) = t.*cos(t);
x(2,:) = t.*sin(t);
x(3,:) = zeros(1,N);
ms = 50;
%cm = colormap;
%cm(64,:);

figure;
scatter3(x(1,:), x(2,:), x(3,:), ms, t, 'filled');

何か助けてください。

@jucestain、着色作品、ありがとう。もう一つ質問があります。このように上記のコードにノイズを追加すると、結果は次のようにおかしいものになります

    N = 1000;
    r = linspace(0,1,N);
    t = (3*pi/2)*(1+2*r);
    x(1,:) = t.*cos(t);
    x(2,:) = t.*sin(t);
    x(3,:) = zeros(1,N);
    % Set colors:
    t(1:250) = 1;
    t(251:500) = 2;
    t(501:750) = 3;
    t(751:1000) = 4;
    ms = 50;
    figure;
    scatter3(x(1,:), x(2,:), x(3,:), ms, t, 'filled');

    %add noise
    x(1,:) = x(1,:) + 5*randn(1,N);
    x(2,:) = x(2,:) + 5*randn(1,N);
    x(3,:) = x(3,:) + 5*randn(1,N);
    figure;
    scatter3(x(1,:), x(2,:), x(3,:), ms, t, 'filled');

このプロットの結果は非常に不器用です。理由がわかりません。ノイズを正しく追加していますか、それとも何ですか? プロットは正しいですか?

4

1 に答える 1

3

あなたが持っているtベクトルは色を制御します。tの値を変更することで制御できます。次に例を示します。

N = 1000;
r = linspace(0,1,N);
t = (3*pi/2)*(1+2*r);
x(1,:) = t.*cos(t);
x(2,:) = t.*sin(t);
x(3,:) = zeros(1,N);
% Set colors:
t(1:250) = 1;
t(251:500) = 2;
t(501:750) = 3;
t(751:1000) = 4;
ms = 50;
figure;
scatter3(x(1,:), x(2,:), x(3,:), ms, t, 'filled');

出力:

ここに画像の説明を入力してください

上記は、使用しているカラーマップの種類によって異なります。簡単な場合は、これを代わりに使用することもできます。

N = 1000;
r = linspace(0,1,N);
t = (3*pi/2)*(1+2*r);
x(1,:) = t.*cos(t);
x(2,:) = t.*sin(t);
x(3,:) = zeros(1,N);
% Set colors:
ms = 50;
figure;
scatter3(x(1,1:250), x(2,1:250), x(3,1:250), ms, 'r', 'filled'); % red
hold on;
scatter3(x(1,251:500), x(2,251:500), x(3,251:500), ms, 'g', 'filled'); % green
scatter3(x(1,501:750), x(2,501:750), x(3,501:750), ms, 'b', 'filled'); % blue
scatter3(x(1,751:1000), x(2,751:1000), x(3,751:1000), ms, 'y', 'filled'); % yellow
hold off;

出力:

ここに画像の説明を入力してください

ノイズへのWRT:あなたはあまりにも多くの方法を追加しています。randの範囲は0〜1であるため、0〜5の範囲のノイズを追加します。これは、データの値に相当します。これを行う場合:

N = 1000;
r = linspace(0,1,N);
t = (3*pi/2)*(1+2*r);
x(1,:) = t.*cos(t);
x(2,:) = t.*sin(t);
x(3,:) = zeros(1,N);
% Set colors:
t(1:250) = 1;
t(251:500) = 2;
t(501:750) = 3;
t(751:1000) = 4;
ms = 50;
figure;
scatter3(x(1,:), x(2,:), x(3,:), ms, t, 'filled');

%add noise
x(1,:) = x(1,:) + .5*randn(1,N);
x(2,:) = x(2,:) + .5*randn(1,N);
x(3,:) = x(3,:) + .5*randn(1,N);
figure;
scatter3(x(1,:), x(2,:), x(3,:), ms, t, 'filled');

あなたが得る:

ここに画像の説明を入力してください

これはかなり合理的です。

于 2013-03-17T17:40:16.647 に答える